Π§Π°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π½ΡΠΆΠ΅Π½ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Π΄Π°Ρ Π·Π° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΎΡΡΠ΅ΡΠΎΠ², Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΠ»ΠΎ Π΄Π½Π΅ΠΉ Π±Π΅Π· ΠΏΡΠΎΠ΄Π°ΠΆ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠΎΡΠΎΡΠΈΡΡΡΡ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠ΅Π³Π°ΡΠ°Π±Π»ΠΈΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ (Π΄Π΅Π½Ρ Π½Π΅Π΄Π΅Π»ΠΈ, Π½ΠΎΠΌΠ΅Ρ ΠΊΠ²Π°ΡΡΠ°Π»Π°, ΠΏΡΠ°Π·Π΄Π½ΠΈΠΊΠΈ ΠΈ Ρ. Π΄.), Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½Π° ΠΏΡΠΎΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ β ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄Π°Ρ Π·Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠ΅ΡΡΡ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΏΠΎΡΡΠ΅ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ Π½Π° Π»Π΅ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΊΡΡ ΡΠ°Π±Π»ΠΈΡΠΊΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π΄Π°ΡΠ°ΠΌΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°. ΠΡΠΈΡΠ΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ : MySQL, PostgreSQL, MS SQL Server ΠΈ Oracle. ΠΠ»Π°Π²Π½ΡΠΉ ΠΊΠ°ΠΉΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²ΡΡΡΠ½ΡΡ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π΄Π°ΡΡ β ΡΠΊΡΠΈΠΏΡ ΡΠ°ΠΌ ΠΏΠΎΠ΄ΡΡΡΠΎΠΈΡΡΡ ΠΏΠΎΠ΄ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠ΅ΡΡΡ.
ΠΠ°ΡΠ΅ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΠ°ΡΠΈΡΡΡΡ Ρ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ?
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½ΡΡΠ½ΡΡΡ Π² ΠΊΠΎΠ΄, Π΄Π°Π²Π°ΠΉΡΠ΅ Π±ΡΡΡΡΠ΅Π½ΡΠΊΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ, Π·Π°ΡΠ΅ΠΌ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΡΠΆΠ½ΠΎ:
- ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π΅Π»Ρ: ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎ Π΄Π½ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ-ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΡΠ»ΠΈ ΠΏΡΠΎΠ΄Π°ΠΆΠΈ), ΡΠ°ΠΊΠ°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ "ΠΏΡΡΡΡΠ΅" Π΄Π½ΠΈ Π±Π΅Π· Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ (Π΄Π½ΠΈ Ρ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ ΠΏΡΠΎΠ΄Π°ΠΆΠ°ΠΌΠΈ).
- ΠΠ½Π°Π»ΠΈΠ· ΡΡΠ΅Π½Π΄ΠΎΠ²: ΠΡΡΡΠΎ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, Π³Π΄Π΅ Π½ΡΠΆΠ½Π° Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½Π°Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΊΠ°Π»Π°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ.
- Π£ΠΏΡΠΎΡΡΠΈΡΡ JOIN'Ρ: ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ²ΠΎΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΊ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅, ΡΡΠΎΠ±Ρ Π»Π΅Π³ΠΊΠΎ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ Π΄Π°ΡΡ ΠΈΠ»ΠΈ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΡΠΏΠ»ΠΎΡΠ½ΡΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ.
- ΠΡΡΠ΅ΡΡ: ΠΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π΄Π°Ρ Π΄Π»Ρ ΠΎΡΡΠ΅ΡΠΎΠ², Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ Π΄Π°ΡΠ°ΠΌ Π΄Π°Π½Π½ΡΡ Π½Π΅Ρ.
ΠΡ ΡΡΠΎ, ΠΏΠΎΠ΅Ρ Π°Π»ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π‘Π£ΠΠ!
MySQL
Π MySQL Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 8.0 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (CTE) Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΌ CTE:
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
- WITH RECURSIVE dates AS (...): ΠΠ°Π΄Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ CTE ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ dates.
- "Π―ΠΊΠΎΡΡ" (Π½Π°ΡΠ°Π»ΠΎ): SELECT DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE()) β 1 DAY): Π’ΡΡ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄Π΅Π½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°. CURDATE() Π΄Π°Π΅Ρ ΡΠ΅ΠΊΡΡΡΡ Π΄Π°ΡΡ, DAYOFMONTH(CURDATE()) β Π½ΠΎΠΌΠ΅Ρ Π΄Π½Ρ Π² ΠΌΠ΅ΡΡΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 15 Π΄Π»Ρ 15 ΠΈΡΠ»Ρ), ΠΈ ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠΈΡΠ°Π΅ΠΌ (Π΄Π΅Π½Ρ β 1) Π΄Π½Π΅ΠΉ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΠ°ΡΡΡ Π½Π° 1-Π΅ ΡΠΈΡΠ»ΠΎ.
- "Π Π΅ΠΊΡΡΡΠΈΡ" (ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅): SELECT DATE_ADD(dt, INTERVAL 1 DAY) FROM dates WHERE dt < LAST_DAY(CURDATE()): ΠΡΠ° ΡΠ°ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π΄Π½Ρ ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π΄Π°ΡΠ΅ (dt), ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π΄Π½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ LAST_DAY(CURDATE()).
PostgreSQL
Π£ PostgreSQL Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎ ΡΡΠΏΠ΅ΡΡΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ generate_series(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
- GENERATE_SERIES(start, stop, step): ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
- DATE_TRUNC('month', CURRENT_DATE): "ΠΠ±ΡΠ΅Π·Π°Π΅Ρ" ΡΠ΅ΠΊΡΡΡΡ Π΄Π°ΡΡ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΠΌΠ΅ΡΡΡΠ°, Π΄Π°Π²Π°Ρ Π½Π°ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄Π΅Π½Ρ.
- (DATE_TRUNC('month', CURRENT_DATE) + INTERVAL '1 month' β INTERVAL '1 day')::date: ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΄Π΅Π½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΠ΄Π΅ΠΌ ΠΊ Π½Π°ΡΠ°Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ° (+ INTERVAL '1 month'), Π° Π·Π°ΡΠ΅ΠΌ ΠΎΡΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ Π΄Π΅Π½Ρ (- INTERVAL '1 day'), ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΄Π΅Π½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°.
- '1 day': ΠΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π³ Π² ΡΠ΅ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°Π²Π΅Π½ ΠΎΠ΄Π½ΠΎΠΌΡ Π΄Π½Ρ.
- ::date: ΠΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² ΠΎΠ±ΡΡΠ½ΡΡ Π΄Π°ΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ²ΠΎΠ΄ Π±ΡΠ» ΡΠΈΡΠ΅.
ΠΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅, Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΈ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ PostgreSQL Ρ ΠΏΠΎΠΌΠΎΡΡΡ pgAdmin ΠΈ SQL-Π·Π°ΠΏΡΠΎΡΠΎΠ².
MS SQL Server 2022
SQL Server ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ SQL Server 2022, ΡΡΠ½ΠΊΡΠΈΡ GENERATE_SERIES ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΡΠΌΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½ΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° PostgreSQL, Π½ΠΎ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΏΠΎΡΠΎΠΌ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΠΌ Π² Π΄Π°ΡΡ. ΠΠ»Ρ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΠΉ ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΡΠ°ΠΊ ΡΠ΄ΠΎΠ±Π½Π΅Π΅, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ CTE ΡΠΎΠΆΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ.
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
- GENERATE_SERIES(start, stop, step): ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΡΠ΅Π» ΠΎΡ start Π΄ΠΎ stop Ρ ΡΠ°Π³ΠΎΠΌ step. ΠΡΠ»ΠΈ step Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ ΡΠ°Π²Π΅Π½ 1.
- DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0): Π‘ΡΠΈΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄Π΅Π½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°. ΠΡΠΎ Π½Π°ΡΠ° "ΠΎΡΠΏΡΠ°Π²Π½Π°Ρ ΡΠΎΡΠΊΠ°".
- DAY(EOMONTH(GETDATE())) β 1: EOMONTH(GETDATE()) Π΄Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΄Π΅Π½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°. DAY() ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ Π΄Π½Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 31 Π΄Π»Ρ 31 ΠΈΡΠ»Ρ). ΠΡΡΠΈΡΠ°Π΅ΠΌ 1, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π² Π½Π°ΡΠ΅ΠΉ ΡΠ΅ΡΠΈΠΈ (ΠΎΡ 0 Π΄ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ_Π΄Π½Π΅ΠΉ_Π²_ΠΌΠ΅ΡΡΡΠ΅ β 1). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΌΠ΅ΡΡΡΠ΅ 31 Π΄Π΅Π½Ρ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΈΡΠ»Π° ΠΎΡ 0 Π΄ΠΎ 30.
- DATEADD(day, value, ...): ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ value, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ GENERATE_SERIES (ΡΡΠΎ Π±ΡΠ΄ΡΡ 0, 1, 2, ... Π΄ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ_Π΄Π½Π΅ΠΉ_Π²_ΠΌΠ΅ΡΡΡΠ΅ β 1), ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ ΠΊ Π½Π°ΡΠ΅ΠΉ "ΠΎΡΠΏΡΠ°Π²Π½ΠΎΠΉ ΡΠΎΡΠΊΠ΅". Π’Π°ΠΊ ΠΌΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΡ Π΄Π°ΡΡ ΠΌΠ΅ΡΡΡΠ°.
Legacy MS SQL Server
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
- WITH Dates AS (...): ΠΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ CTE ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Dates.
- "Π―ΠΊΠΎΡΡ" (Π½Π°ΡΠ°Π»ΠΎ): SELECT DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) AS dt: ΠΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΡΠΈΠ΅ΠΌ Π² SQL Server, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄Π΅Π½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°.DATEDIFF(month, 0, GETDATE()): Π‘ΡΠΈΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ "Π³ΡΠ°Π½ΠΈΡ ΠΌΠ΅ΡΡΡΠ΅Π²", ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ 0 (ΠΊΠΎΡΠΎΡΡΠΉ SQL Server ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊ 1 ΡΠ½Π²Π°ΡΡ 1900 Π³ΠΎΠ΄Π°) ΠΈ GETDATE().DATEADD(month, ..., 0): ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΡΡΠ΅Π² ΠΊ 0, ΠΈ Π²ΡΠ°Π»Ρ β ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄Π΅Π½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°.
- DATEDIFF(month, 0, GETDATE()): Π‘ΡΠΈΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ "Π³ΡΠ°Π½ΠΈΡ ΠΌΠ΅ΡΡΡΠ΅Π²", ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ 0 (ΠΊΠΎΡΠΎΡΡΠΉ SQL Server ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊ 1 ΡΠ½Π²Π°ΡΡ 1900 Π³ΠΎΠ΄Π°) ΠΈ GETDATE().
- DATEADD(month, ..., 0): ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΡΡΠ΅Π² ΠΊ 0, ΠΈ Π²ΡΠ°Π»Ρ β ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄Π΅Π½Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΡΠ°.
- "Π Π΅ΠΊΡΡΡΠΈΡ" (ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅): SELECT DATEADD(day, 1, dt) FROM Dates WHERE DATEPART(month, DATEADD(day, 1, dt)) = DATEPART(month, GETDATE()): ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π΄Π½Ρ ΠΊ dt Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΌΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π΄Π°ΡΡ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΌ.
- OPTION (MAXRECURSION 366): ΠΠ°ΠΆΠ½Π°Ρ ΡΡΡΠΊΠ° Π΄Π»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ CTE Π² SQL Server. Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ ΡΠ°ΡΡΡ. 366 β ΡΡΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΡΡΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π΄Π½ΠΈ Π² Π³ΠΎΠ΄Ρ (Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΠΈΡΠΎΠΊΠΎΡΠ½ΡΠ΅).
π» ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
ΠΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°Β»
Oracle
Π Oracle Π΅ΡΡΡ ΠΌΠΎΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ CONNECT BY LEVEL, ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Ρ ΠΎΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ Π² ΡΠ°Π·Π½ΡΡ Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ , ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΄Π° Π΄Π°Ρ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡ ΠΎΠΆΠ΅ΠΉ. Π Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ GENERATE_SERIES Π² SQL Server 2022, ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ SQL Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΏΡΠΎΡΠ°ΡΡ ΡΡΡ Π·Π°Π΄Π°ΡΡ. ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΏΡΠΈΠ΅ΠΌΠΎΠ² β ΡΡΠΏΠ΅ΡΠ²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ Π΄Π΅Π»Π°ΡΡ ΠΊΡΡΡΡΠ΅ ΠΎΡΡΠ΅ΡΡ Π² SQL. ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ ΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π‘Π£ΠΠ ΠΈ Π΅Ρ Π²Π΅ΡΡΠΈΠΈ.
ΠΠ°Π΄Π΅ΡΡΡ, Π±ΡΠ»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ! ΠΡΠ»ΠΈ Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΊΠΎΠ»ΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ, ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°Ρ !