문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
기술문서:레퍼런스:쿼리:응용:calendar_query [2025/02/18 15:13] carlito76 |
기술문서:레퍼런스:쿼리:응용:calendar_query [2025/11/27 11:48] (현재) carlito76 |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| {{htmlmetatags> | {{htmlmetatags> | ||
| - | metatag-robots=(index, | + | metatag-description=(달력 쿼리, |
| - | metatag-keywords=(데이터베이스, | + | metatag-og: |
| - | metatag-description=(잡개발자 리토의 잡위키 - 데이터베이스, | + | |
| - | metatag-og: | + | |
| }} | }} | ||
| ====== Calendar Query ====== | ====== Calendar Query ====== | ||
| - | ===== MariaDB/MySQL ===== | + | <note tip> |
| + | 최소 지원 버전은 약간의 차이가 있을 수 있습니다. | ||
| + | </ | ||
| + | |||
| + | ===== MySQL/ | ||
| <sxh sql; gutter: true;> | <sxh sql; gutter: true;> | ||
| + | /* | ||
| + | MySQL 5.0.1 이상/ | ||
| + | */ | ||
| SELECT | SELECT | ||
| - | MIN(CASE WHEN week = 1 THEN day END) AS sun | + | MIN(CASE WHEN week = 1 THEN dt END) AS sun |
| - | , MIN(CASE WHEN week = 2 THEN day END) AS mon | + | , MIN(CASE WHEN week = 2 THEN dt END) AS mon |
| - | , MIN(CASE WHEN week = 3 THEN day END) AS tue | + | , MIN(CASE WHEN week = 3 THEN dt END) AS tue |
| - | , MIN(CASE WHEN week = 4 THEN day END) AS wed | + | , MIN(CASE WHEN week = 4 THEN dt END) AS wed |
| - | , MIN(CASE WHEN week = 5 THEN day END) AS thu | + | , MIN(CASE WHEN week = 5 THEN dt END) AS thu |
| - | , MIN(CASE WHEN week = 6 THEN day END) AS fri | + | , MIN(CASE WHEN week = 6 THEN dt END) AS fri |
| - | , MIN(CASE WHEN week = 7 THEN day END) AS sat | + | , MIN(CASE WHEN week = 7 THEN dt END) AS sat |
| FROM | FROM | ||
| (SELECT | (SELECT | ||
| WEEK(dt, 0) AS grp | WEEK(dt, 0) AS grp | ||
| , DAYOFWEEK(dt) AS week | , DAYOFWEEK(dt) AS week | ||
| - | , DATE_FORMAT(dt, | + | , DATE_FORMAT(dt, |
| - | -- , DAYOFMONTH(dt) AS day | + | -- , DAYOFMONTH(dt) AS dt |
| FROM | FROM | ||
| (SELECT | (SELECT | ||
| - | (a + b) AS dt | + | DATE_ADD(a, INTERVAL |
| FROM | FROM | ||
| (SELECT | (SELECT | ||
| - | (LAST_DAY(NOW() + INTERVAL -1 MONTH) | + | DATE_ADD(LAST_DAY(NOW() + INTERVAL -1 MONTH), INTERVAL 1 DAY) AS a |
| - | -- STR_TO_DATE(' | + | -- STR_TO_DATE(' |
| ) a | ) a | ||
| , (SELECT | , (SELECT | ||
| 줄 54: | 줄 59: | ||
| ===== MSSQL ===== | ===== MSSQL ===== | ||
| <sxh sql; gutter: true;> | <sxh sql; gutter: true;> | ||
| + | /* | ||
| + | MSSQL 2000 이상 | ||
| + | */ | ||
| SELECT | SELECT | ||
| - | MIN(CASE WHEN week = 1 THEN day END) AS sun | + | MIN(CASE WHEN week = 1 THEN dt END) AS sun |
| - | , MIN(CASE WHEN week = 2 THEN day END) AS mon | + | , MIN(CASE WHEN week = 2 THEN dt END) AS mon |
| - | , MIN(CASE WHEN week = 3 THEN day END) AS tue | + | , MIN(CASE WHEN week = 3 THEN dt END) AS tue |
| - | , MIN(CASE WHEN week = 4 THEN day END) AS wed | + | , MIN(CASE WHEN week = 4 THEN dt END) AS wed |
| - | , MIN(CASE WHEN week = 5 THEN day END) AS thu | + | , MIN(CASE WHEN week = 5 THEN dt END) AS thu |
| - | , MIN(CASE WHEN week = 6 THEN day END) AS fri | + | , MIN(CASE WHEN week = 6 THEN dt END) AS fri |
| - | , MIN(CASE WHEN week = 7 THEN day END) AS sat | + | , MIN(CASE WHEN week = 7 THEN dt END) AS sat |
| FROM | FROM | ||
| (SELECT | (SELECT | ||
| - | DATEPART(WK, | + | DATEPART(WK, |
| - | , DATEPART(DW, | + | , DATEPART(DW, |
| - | , day | + | , CONVERT(CHAR(10), |
| + | -- , DAY(dt) AS dt | ||
| FROM | FROM | ||
| (SELECT | (SELECT | ||
| - | CONVERT(CHAR(10), | + | DATEADD(DD, |
| - | -- CONVERT(CHAR(10), | + | -- DATEADD(DD, number, ' |
| FROM | FROM | ||
| master.dbo.spt_values | master.dbo.spt_values | ||
| 줄 92: | 줄 101: | ||
| ===== Oracle/ | ===== Oracle/ | ||
| <sxh sql; gutter: true;> | <sxh sql; gutter: true;> | ||
| + | /* | ||
| + | Oracle 8i 이상/ | ||
| + | */ | ||
| SELECT | SELECT | ||
| - | MIN(DECODE(week, | + | MIN(DECODE(week, |
| - | , MIN(DECODE(week, | + | , MIN(DECODE(week, |
| - | , MIN(DECODE(week, | + | , MIN(DECODE(week, |
| - | , MIN(DECODE(week, | + | , MIN(DECODE(week, |
| - | , MIN(DECODE(week, | + | , MIN(DECODE(week, |
| - | , MIN(DECODE(week, | + | , MIN(DECODE(week, |
| - | , MIN(DECODE(week, | + | , MIN(DECODE(week, |
| FROM | FROM | ||
| (SELECT | (SELECT | ||
| TRUNC(dt + LEVEL - 1, ' | TRUNC(dt + LEVEL - 1, ' | ||
| , TO_CHAR(dt + LEVEL - 1, ' | , TO_CHAR(dt + LEVEL - 1, ' | ||
| - | , TO_CHAR(dt + LEVEL - 1, ' | + | , TO_CHAR(dt + LEVEL - 1, ' |
| + | -- , TO_CHAR(dt + LEVEL - 1, ' | ||
| FROM | FROM | ||
| (SELECT | (SELECT | ||
| 줄 123: | 줄 136: | ||
| ===== PostgreSQL ===== | ===== PostgreSQL ===== | ||
| <sxh sql; gutter: true;> | <sxh sql; gutter: true;> | ||
| + | /* | ||
| + | PostgreSQL 8.0 이상 | ||
| + | */ | ||
| SELECT | SELECT | ||
| - | MIN(CASE WHEN week = 0 THEN day END) AS sun | + | MIN(CASE WHEN week = 0 THEN dt END) AS sun |
| - | , MIN(CASE WHEN week = 1 THEN day END) AS mon | + | , MIN(CASE WHEN week = 1 THEN dt END) AS mon |
| - | , MIN(CASE WHEN week = 2 THEN day END) AS tue | + | , MIN(CASE WHEN week = 2 THEN dt END) AS tue |
| - | , MIN(CASE WHEN week = 3 THEN day END) AS wed | + | , MIN(CASE WHEN week = 3 THEN dt END) AS wed |
| - | , MIN(CASE WHEN week = 4 THEN day END) AS thu | + | , MIN(CASE WHEN week = 4 THEN dt END) AS thu |
| - | , MIN(CASE WHEN week = 5 THEN day END) AS fri | + | , MIN(CASE WHEN week = 5 THEN dt END) AS fri |
| - | , MIN(CASE WHEN week = 6 THEN day END) AS sat | + | , MIN(CASE WHEN week = 6 THEN dt END) AS sat |
| FROM | FROM | ||
| (SELECT | (SELECT | ||
| CASE | CASE | ||
| - | WHEN EXTRACT(DOW FROM day) = 0 THEN DATE_TRUNC(' | + | WHEN EXTRACT(DOW FROM dt) = 0 THEN DATE_TRUNC(' |
| - | ELSE DATE_TRUNC(' | + | ELSE DATE_TRUNC(' |
| END AS grp | END AS grp | ||
| - | , EXTRACT(DOW FROM day) AS week | + | , EXTRACT(DOW FROM dt) AS week |
| - | , day | + | , TO_CHAR(dt, ' |
| + | -- , EXTRACT(DAY FROM dt) AS dt | ||
| FROM | FROM | ||
| (SELECT | (SELECT | ||
| 줄 149: | 줄 166: | ||
| , INTERVAL '1 DAY' | , INTERVAL '1 DAY' | ||
| ) AS DATE | ) AS DATE | ||
| - | ) AS day | + | ) AS dt |
| ) cal | ) cal | ||
| ) cal | ) cal | ||
| 줄 158: | 줄 175: | ||
| ; | ; | ||
| </ | </ | ||
| + | |||
| + | {{tag>" | ||