π ΠΠ°ΠΊ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ Π² SQL: ΠΏΡΠΎΡΡΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
ΠΠ°ΠΊ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ Π² SQL?
Π SQL ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π΄Π°ΡΠ°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ DATEDIFF. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ΠΏΠ΅ΡΠ²ΡΡ Π΄Π°ΡΡ, Π²ΡΠΎΡΡΡ Π΄Π°ΡΡ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ.
SELECT DATEDIFF(day, '2021-01-01', '2022-01-01') AS days_between_dates;
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ Π΄Π°ΡΠ°ΠΌΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ 365.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ Ρ ΡΡΠ΅ΡΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ DATEDIFF Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ "second" ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄ Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄Π½Π΅.
SELECT DATEDIFF(second, '2021-01-01 12:00:00', '2021-01-02 12:00:00') / (60 * 60 * 24) AS days_between_dates_with_time;
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈ Π²ΡΠ΅ΠΌΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ Π΄Π°ΡΠ°ΠΌΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ 1.0.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ Π² SQL
Π Π°Π±ΠΎΡΠ° Ρ Π΄Π°ΡΠ°ΠΌΠΈ β Π²Π°ΠΆΠ½Π°Ρ ΡΠ°ΡΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΠΈΡ ΡΡ Π·Π°Π΄Π°Ρ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄Π°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π΄Π°ΡΠ°ΠΌΠΈ. Π ΡΠ·ΡΠΊΠ΅ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² SQL ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ.
1. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ DATEDIFF
Π€ΡΠ½ΠΊΡΠΈΡ DATEDIFF (ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠ°Π·Π½ΠΈΡΡ Π² Π΄Π½ΡΡ , ΠΌΠ΅ΡΡΡΠ°Ρ ΠΈΠ»ΠΈ Π³ΠΎΠ΄Π°Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π΄Π°ΡΠ°ΠΌΠΈ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ DATEDIFF Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
DATEDIFF(interval, start_date, end_date)
ΠΠ΄Π΅:
- interval β ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠ°Π·Π½ΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 'dd' Π΄Π»Ρ Π΄Π½Π΅ΠΉ, 'mm' Π΄Π»Ρ ΠΌΠ΅ΡΡΡΠ΅Π², 'yy' Π΄Π»Ρ Π»Π΅Ρ.
- start_date β Π΄Π°ΡΠ° Π½Π°ΡΠ°Π»Π°.
- end_date β Π΄Π°ΡΠ° ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ '2021-01-01' ΠΈ '2022-01-01', ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ:
SELECT DATEDIFF('dd', '2021-01-01', '2022-01-01') AS days_diff;
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ '365', ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ Π΄Π²ΡΠΌΡ Π΄Π°ΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΠ»ΠΎ 365 Π΄Π½Π΅ΠΉ.
2. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
ΠΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π²ΡΡΠΈΡΠ°Π΅ΠΌ ΠΎΠ΄Π½Ρ Π΄Π°ΡΡ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠΉ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°Π·Π½ΠΈΡΡ Π² Π΄Π½ΡΡ . Π Π°Π·Π½ΠΈΡΠ° Π² Π΄Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π΄Π°ΡΠ°ΠΌΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
DATEDIFF(day, start_date, end_date)
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π΄Π°ΡΠ°ΠΌΠΈ.
ΠΡΠΈΠΌΠ΅ΡΡ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π΄Π»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ.
ΠΡΠΈΠΌΠ΅Ρ 1:
ΠΠΎΠ΄ΡΡΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ '2020-01-01' ΠΈ '2020-01-10':
SELECT DATEDIFF(day, '2020-01-01', '2020-01-10') AS days_diff;
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ: 9 Π΄Π½Π΅ΠΉ.
ΠΡΠΈΠΌΠ΅Ρ 2:
ΠΠΎΠ΄ΡΡΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ '2021-06-01' ΠΈ '2021-06-30':
SELECT DATEDIFF(day, '2021-06-01', '2021-06-30') AS days_diff;
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ: 29 Π΄Π½Π΅ΠΉ.
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ DATEDIFF ΠΈΠ»ΠΈ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠ°ΡΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ Π² SQL.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ° ΡΡΠΎΠΌ ΠΌΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌ Π½Π°ΡΡ ΡΡΠ°ΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°ΡΠ°ΠΌΠΈ Π² SQL. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ β Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ DATEDIFF ΠΈ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ±Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½ΡΠΆΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
ΠΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ DATEDIFF ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ Π²ΡΠ΅ΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ.