사용자 도구

사이트 도구


기술문서:레퍼런스:쿼리:응용:calendar_query

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
기술문서:레퍼런스:쿼리:응용:calendar_query [2025/02/18 15:13]
carlito76
기술문서:레퍼런스:쿼리:응용:calendar_query [2025/11/27 11:48] (현재)
carlito76
줄 1: 줄 1:
 {{htmlmetatags> {{htmlmetatags>
-metatag-robots=(index,follow) +metatag-description=(달력 쿼리, Calendar Query, 달력, Calendar, 데이터베이스, DBMS, SQLMySQL, MariaDB, MSSQL, OracleTibero, PostgreSQL) 
-metatag-keywords=(데이터베이스, DBMS, 달력, Calendar, 쿼리, Query, 달력 쿼리, Calendar QueryMariaDB/MySQL, MSSQL, Oracle/Tibero, PostgreSQL) +metatag-og:description=(달력 쿼리, Calendar Query, 달력, Calendar, 데이터베이스, DBMS, SQL, MySQL, MariaDB, MSSQL, OracleTibero, PostgreSQL)
-metatag-description=(잡개발자 리토의 잡위키 - 데이터베이스, DBMS, 달력Calendar, 쿼리, Query, 달력 쿼리, Calendar Query, MariaDB/MySQL, MSSQL, Oracle/Tibero, PostgreSQL) +
-metatag-og:description=(잡개발자 리토의 잡위키 - 데이터베이스, DBMS, 달력, Calendar, 쿼리, Query, 달력 쿼리, Calendar QueryMariaDB/MySQL, MSSQL, Oracle/Tibero, PostgreSQL)+
 }} }}
  
 ====== Calendar Query ====== ====== Calendar Query ======
  
-===== MariaDB/MySQL =====+<note tip> 
 +최소 지원 버전은 약간의 차이가 있을 수 있습니다. 
 +</note> 
 + 
 +===== MySQL/MariaDB =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
 +/*
 + MySQL 5.0.1 이상/MariaDB 5.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, '%Y-%m-%d') AS day + , DATE_FORMAT(dt, '%Y-%m-%d') AS dt 
- -- , DAYOFMONTH(dt) AS day+ -- , DAYOFMONTH(dt) AS dt
  FROM  FROM
  (SELECT  (SELECT
- (a b) AS dt+ DATE_ADD(a, INTERVAL DAY) AS dt
  FROM  FROM
  (SELECT  (SELECT
- (LAST_DAY(NOW() + INTERVAL -1 MONTH) INTERVAL 1 DAY) AS a + DATE_ADD(LAST_DAY(NOW() + INTERVAL -1 MONTH)INTERVAL 1 DAY) AS a 
- -- STR_TO_DATE('20251001', '%Y%m%d') AS a+ -- STR_TO_DATE('20250101', '%Y%m%d') AS a
  ) 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, day) AS grp + DATEPART(WK, dt) AS grp 
- , DATEPART(DW, day) AS week + , DATEPART(DW, dt) AS week 
-day+CONVERT(CHAR(10), dt, 23) AS dt 
 + -- , DAY(dt) AS dt
  FROM  FROM
  (SELECT  (SELECT
- CONVERT(CHAR(10), DATEADD(DD, number, CONVERT(VARCHAR(6), GETDATE(), 112) + '01'), 23) AS day + DATEADD(DD, number, CONVERT(VARCHAR(6), GETDATE(), 112) + '01') AS dt 
- -- CONVERT(CHAR(10), DATEADD(DD, number, '20250101'), 23) AS day+ -- DATEADD(DD, number, '20250101') AS dt
  FROM  FROM
  master.dbo.spt_values  master.dbo.spt_values
줄 92: 줄 101:
 ===== Oracle/Tibero ===== ===== Oracle/Tibero =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
 +/*
 + Oracle 8i 이상/Tibero 4 이상
 +*/
 SELECT SELECT
- MIN(DECODE(week, 1, day)) AS sun + MIN(DECODE(week, 1, dt)) AS sun 
- , MIN(DECODE(week, 2, day)) AS mon + , MIN(DECODE(week, 2, dt)) AS mon 
- , MIN(DECODE(week, 3, day)) AS tue + , MIN(DECODE(week, 3, dt)) AS tue 
- , MIN(DECODE(week, 4, day)) AS wed + , MIN(DECODE(week, 4, dt)) AS wed 
- , MIN(DECODE(week, 5, day)) AS thu + , MIN(DECODE(week, 5, dt)) AS thu 
- , MIN(DECODE(week, 6, day)) AS fri + , MIN(DECODE(week, 6, dt)) AS fri 
- , MIN(DECODE(week, 7, day)) AS sat+ , MIN(DECODE(week, 7, dt)) AS sat
 FROM FROM
  (SELECT  (SELECT
  TRUNC(dt + LEVEL - 1, 'D') AS grp  TRUNC(dt + LEVEL - 1, 'D') AS grp
  , TO_CHAR(dt + LEVEL - 1, 'D') AS week  , TO_CHAR(dt + LEVEL - 1, 'D') AS week
- , TO_CHAR(dt + LEVEL - 1, 'YYYY-MM-DD') AS day+ , TO_CHAR(dt + LEVEL - 1, 'YYYY-MM-DD') AS dt 
 + -- , TO_CHAR(dt + LEVEL - 1, 'FMDD') AS dt
  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('WEEK', day) + INTERVAL '6 DAY' + WHEN EXTRACT(DOW FROM dt) = 0 THEN DATE_TRUNC('WEEK', dt) + INTERVAL '6 DAY' 
- ELSE DATE_TRUNC('WEEK', day) + INTERVAL '-1 DAY'+ ELSE DATE_TRUNC('WEEK', dt) + INTERVAL '-1 DAY'
  END AS grp  END AS grp
- , EXTRACT(DOW FROM day) AS week + , EXTRACT(DOW FROM dt) AS week 
-day+TO_CHAR(dt, 'YYYY-MM-DD') AS 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:
 ; ;
 </sxh> </sxh>
 +
 +{{tag>"쿼리" "Query" "응용"}}