Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

유령노트

데이터 없이 해당 일별, 월별 구하기 본문

# Dev/SQL

데이터 없이 해당 일별, 월별 구하기

유령손 2023. 7. 21. 11:27

10분별 

1
2
3
4
5
6
7
8
SELECT
    DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-%d'), INTERVAL (t4.num * 100 + t3.num * 10 + t2.num) * 10 MINUTE), '%Y-%m-%d %H:%i') AS date
FROM
    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2
    , (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3
    , (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4
WHERE
    DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-%d'), INTERVAL (t4.num * 100 + t3.num * 10 + t2.num) * 10 MINUTE) < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
cs

 

일별 

1
2
3
4
5
6
7
8
9
SELECT
        DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL (t4.num * 1000 + t3.num * 100 + t2.num * 10 + t1.num) DAY), '%Y-%m-%d')    AS    date
FROM
        (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1
    ,    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2
    ,    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3
    ,    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4
WHERE
DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL (t4.num * 1000 + t3.num * 100 + t2.num * 10 + t1.num) DAY) <= LAST_DAY(CURDATE())
cs

 

일별 범위지정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
        DATE_FORMAT(calendar_date, '%Y-%m-%d')        AS    date
FROM
        (
            SELECT
                    DATE_ADD(SUBDATE(CURDATE(), INTERVAL 1 MONTH), INTERVAL (units.num * 100 + tens.num * 10 + ones.num) DAY)        AS    calendar_date
            FROM
                    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)        AS    units
            CROSS JOIN
                    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)        AS    tens
            CROSS JOIN
                    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)        AS    ones
            WHERE
                    DATE_ADD(SUBDATE(CURDATE(), INTERVAL 1 MONTH), INTERVAL (units.num * 100 + tens.num * 10 + ones.num) DAY) < CURDATE()
        )        AS    calendar
ORDER    BY
        calendar_date
cs

 

월별

1
2
3
4
5
6
7
8
9
SELECT
        DISTINCT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CONCAT(DATE_FORMAT(CURDATE(), '%Y'), '-', (t4.num*100 + t3.num*10 + t2.num), '-01'), '%Y-%m-%d'), INTERVAL (t1.num-1) DAY), '%Y-%m')    AS    date
FROM
        (SELECT 1 AS num UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) t1
    ,    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2
    ,    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3
    ,    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4
WHERE
        DATE_ADD(DATE_FORMAT(CONCAT(DATE_FORMAT(CURDATE(), '%Y'), '-', (t4.num*100 + t3.num*10 + t2.num), '-01'), '%Y-%m-%d'), INTERVAL (t1.num-1) DAY) <= LAST_DAY(CONCAT(DATE_FORMAT(CURDATE(), '%Y'), '-', (t4.num*100 + t3.num*10 + t2.num), '-01'))
cs

 

월별 범위지정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT DISTINCT
DATE_FORMAT(calendar_date, '%Y-%m') AS date
FROM
(
    -- 서브쿼리를 활용하여 날짜를 생성하고, 시작일자와 종료일자 범위 내의 날짜만 선택함
    SELECT
        ADDDATE('시작일자', INTERVAL n MONTH) AS calendar_date
    FROM
            (
                -- 연속적인 숫자를 생성하여 월 계산에 활용
                SELECT
                    (t2.num * 10 + t1.num) AS n
                FROM
                    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1,
                    (SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2
            )    AS    months
    WHERE
            ADDDATE('시작일자', INTERVAL n MONTH) <= '종료일자'
)    AS    calendar
ORDER    BY
        calendar_date
cs