ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL DATETIME ์„ฑ๋Šฅ ์ตœ์ ํ™” ์™„๋ฒฝ ๊ฐ€์ด๋“œ
    Programing Language/SQL 2025. 6. 13. 21:10
    ๋ฐ˜์‘ํ˜•

    ๐Ÿš€ ํ•ต์‹ฌ ์›์น™: ์ธ๋ฑ์Šค๋ฅผ ํƒ€๊ฒŒ ํ•˜๋ผ!

    โŒ ์ธ๋ฑ์Šค ๋ชป ํƒ€๋Š” ๋‚˜์œ ์˜ˆ

    -- MONTH(), YEAR() ํ•จ์ˆ˜ ์‚ฌ์šฉ → ์ธ๋ฑ์Šค ๋ฌด๋ ฅํ™”
    WHERE MONTH(order_date) = 10
    WHERE YEAR(order_date) = 2023
    WHERE DATE(created_at) = '2023-10-15'
    
    -- ๋ฌธ์ž์—ด ์—ฐ์‚ฐ → ์ธ๋ฑ์Šค ๋ฌด๋ ฅํ™”  
    WHERE DATE_FORMAT(order_date, '%Y-%m') = '2023-10'
    

    โœ… ์ธ๋ฑ์Šค ํƒ€๋Š” ์ข‹์€ ์˜ˆ

    -- ๋ฒ”์œ„ ์กฐ๊ฑด ์‚ฌ์šฉ → ์ธ๋ฑ์Šค ํ™œ์šฉ
    WHERE order_date >= '2023-10-01' AND order_date < '2023-11-01'
    WHERE created_at >= '2023-10-15' AND created_at < '2023-10-16'
    WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
    

    ๐Ÿ“… ๋‚ ์งœ๋ณ„ ์ตœ์ ํ™” ํŒจํ„ด

    1. ํŠน์ • ์›” ์กฐํšŒ (10์›” ๋ฐ์ดํ„ฐ)

    -- โŒ ๋А๋ฆฐ ๋ฐฉ๋ฒ• (ํ•จ์ˆ˜ ์‚ฌ์šฉ)
    WHERE MONTH(order_date) = 10 AND YEAR(order_date) = 2023
    
    -- โœ… ๋น ๋ฅธ ๋ฐฉ๋ฒ• (๋ฒ”์œ„ ์‚ฌ์šฉ)
    WHERE order_date >= '2023-10-01' 
      AND order_date < '2023-11-01'
    

    2. ํŠน์ • ์ผ ์กฐํšŒ (์˜ค๋Š˜ ๋ฐ์ดํ„ฐ)

    -- โŒ ๋А๋ฆฐ ๋ฐฉ๋ฒ•
    WHERE DATE(created_at) = CURDATE()
    
    -- โœ… ๋น ๋ฅธ ๋ฐฉ๋ฒ•
    WHERE created_at >= CURDATE() 
      AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
    

    3. ์ตœ๊ทผ N์ผ ์กฐํšŒ

    -- โŒ ๋А๋ฆฐ ๋ฐฉ๋ฒ•
    WHERE DATEDIFF(CURDATE(), order_date) <= 7
    
    -- โœ… ๋น ๋ฅธ ๋ฐฉ๋ฒ•
    WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
    

    4. ์‹œ๊ฐ„๋Œ€๋ณ„ ์กฐํšŒ (9์‹œ~19์‹œ)

    -- โŒ ๋А๋ฆฐ ๋ฐฉ๋ฒ•
    WHERE HOUR(created_at) BETWEEN 9 AND 19
    
    -- โœ… ๋น ๋ฅธ ๋ฐฉ๋ฒ• (ํ•˜๋ฃจ ๊ธฐ์ค€)
    WHERE TIME(created_at) BETWEEN '09:00:00' AND '19:00:00'
    
    -- โœ… ๋” ์ •ํ™•ํ•œ ๋ฐฉ๋ฒ• (ํŠน์ • ๋‚ ์งœ)
    WHERE created_at >= '2023-10-15 09:00:00' 
      AND created_at <= '2023-10-15 19:59:59'
    

    ๐ŸŽฏ ์„ฑ๋Šฅ ์ˆœ์œ„๋ณ„ ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฒ•

    ๐Ÿฅ‡ ์ตœ๊ณ  ์„ฑ๋Šฅ (์ธ๋ฑ์Šค 100% ํ™œ์šฉ)

    -- 1. ๋ฒ”์œ„ ์กฐ๊ฑด
    WHERE order_date >= '2023-10-01' AND order_date < '2023-11-01'
    
    -- 2. BETWEEN (๊ฒฝ๊ณ„ ์ฃผ์˜)
    WHERE order_date BETWEEN '2023-10-01' AND '2023-10-31 23:59:59'
    
    -- 3. ์ง์ ‘ ๋น„๊ต
    WHERE order_date = '2023-10-15 14:30:00'
    

    ๐Ÿฅˆ ์–‘ํ˜ธํ•œ ์„ฑ๋Šฅ (๋ถ€๋ถ„ ์ธ๋ฑ์Šค ํ™œ์šฉ)

    -- 1. TIME ํ•จ์ˆ˜ (๋‚ ์งœ๋Š” ๊ณ ์ •, ์‹œ๊ฐ„๋งŒ ํ•„ํ„ฐ)
    WHERE DATE(created_at) = '2023-10-15' 
      AND TIME(created_at) BETWEEN '09:00:00' AND '17:00:00'
    
    -- 2. ๋ณตํ•ฉ ์กฐ๊ฑด
    WHERE order_date >= '2023-01-01' 
      AND DAYOFWEEK(order_date) = 2  -- ์›”์š”์ผ
    

    ๐Ÿฅ‰ ๋‚ฎ์€ ์„ฑ๋Šฅ (์ธ๋ฑ์Šค ํ™œ์šฉ ์–ด๋ ค์›€)

    -- ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋กœ ๋น„๊ต (ํ”ผํ•  ์ˆ˜ ์—†์„ ๋•Œ๋งŒ ์‚ฌ์šฉ)
    WHERE MONTH(order_date) = 10
    WHERE YEAR(order_date) = 2023
    WHERE WEEKDAY(order_date) = 0
    

    ๐Ÿ’ก  ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์‹ค์ „ ํŒ

    ๋ฌธ์ œ ์œ ํ˜•๋ณ„ ์ตœ์  ํŒจํ„ด

    1. ์›”๋ณ„ ์ง‘๊ณ„

    -- ๋ฌธ์ œ: "2023๋…„ ๊ฐ ์›”๋ณ„ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰"
    -- โŒ ์ด๋ ‡๊ฒŒ ํ•˜์ง€ ๋งˆ์„ธ์š”
    SELECT MONTH(order_date) as month, COUNT(*)
    FROM orders 
    WHERE YEAR(order_date) = 2023
    GROUP BY MONTH(order_date);
    
    -- โœ… ์ด๋ ‡๊ฒŒ ํ•˜์„ธ์š”
    SELECT DATE_FORMAT(order_date, '%m') as month, COUNT(*)
    FROM orders 
    WHERE order_date >= '2023-01-01' 
      AND order_date < '2024-01-01'
    GROUP BY DATE_FORMAT(order_date, '%Y-%m');
    

    2. ์‹œ๊ฐ„๋Œ€๋ณ„ ๋ถ„์„

    -- ๋ฌธ์ œ: "์ž…์–‘์ด ๊ฐ€์žฅ ํ™œ๋ฐœํ•œ ์‹œ๊ฐ„๋Œ€ (9์‹œ~19์‹œ)"
    -- โœ… ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šคํƒ€์ผ
    SELECT HOUR(datetime) as hour, COUNT(*) as count
    FROM animal_outs 
    WHERE HOUR(datetime) BETWEEN 9 AND 19
    GROUP BY HOUR(datetime)
    ORDER BY hour;
    

    3. ๋‚ ์งœ ๋ฒ”์œ„ ํ•„ํ„ฐ๋ง

    -- ๋ฌธ์ œ: "10์›”์— ๋Œ€์—ฌ๋œ ์ฐจ๋Ÿ‰"
    -- โœ… ์ฟ ํŒก BA ์ตœ์  ๋‹ต์•ˆ
    WHERE start_date >= '2023-10-01' 
      AND start_date < '2023-11-01'
      
    -- ๋˜๋Š” ์‹œ๊ฐ„๊นŒ์ง€ ์ •ํ™•ํžˆ
    WHERE start_date >= '2023-10-01 00:00:00' 
      AND start_date <= '2023-10-31 23:59:59'
    

    ๐Ÿ”ง ๊ณ ๊ธ‰ ์ตœ์ ํ™” ๊ธฐ๋ฒ•

    1. ์ธ๋ฑ์Šค ์„ค๊ณ„

    -- ๋‚ ์งœ ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค ์ƒ์„ฑ
    CREATE INDEX idx_order_date ON orders(order_date);
    
    -- ๋ณตํ•ฉ ์ธ๋ฑ์Šค (์ž์ฃผ ํ•จ๊ป˜ ์กฐํšŒ๋˜๋Š” ์ปฌ๋Ÿผ)
    CREATE INDEX idx_date_status ON orders(order_date, status);
    CREATE INDEX idx_date_customer ON orders(order_date, customer_id);
    

    2. ํŒŒํ‹ฐ์…˜ ํ…Œ์ด๋ธ” ํ™œ์šฉ

    -- ์›”๋ณ„ ํŒŒํ‹ฐ์…˜ (๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ)
    ALTER TABLE orders 
    PARTITION BY RANGE (YEAR(order_date)*100 + MONTH(order_date)) (
        PARTITION p202301 VALUES LESS THAN (202302),
        PARTITION p202302 VALUES LESS THAN (202303),
        PARTITION p202303 VALUES LESS THAN (202304)
    );
    

    3. ๊ณ„์‚ฐ๋œ ์ปฌ๋Ÿผ ๋ฏธ๋ฆฌ ์ €์žฅ

    -- ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋‚ ์งœ ์ •๋ณด๋ฅผ ๋ณ„๋„ ์ปฌ๋Ÿผ์œผ๋กœ
    ALTER TABLE orders ADD COLUMN order_month INT;
    ALTER TABLE orders ADD COLUMN order_hour INT;
    
    UPDATE orders SET 
        order_month = MONTH(order_date),
        order_hour = HOUR(order_date);
    
    -- ์ดํ›„ ๋น ๋ฅธ ์กฐํšŒ
    WHERE order_month = 10 AND order_hour BETWEEN 9 AND 19;
    

    โšก ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

    100๋งŒ ๊ฑด ๋ฐ์ดํ„ฐ ๊ธฐ์ค€ ์‹คํ–‰ ์‹œ๊ฐ„

    ๋ฐฉ๋ฒ• ์‹คํ–‰ ์‹œ๊ฐ„ ์ธ๋ฑ์Šค ํ™œ์šฉ

    >= AND < 0.01์ดˆ โœ… ์™„์ „ ํ™œ์šฉ
    BETWEEN 0.02์ดˆ โœ… ์™„์ „ ํ™œ์šฉ
    DATE() = 2.3์ดˆ โŒ ์ „์ฒด ์Šค์บ”
    MONTH() = 3.1์ดˆ โŒ ์ „์ฒด ์Šค์บ”
    YEAR() = 2.8์ดˆ โŒ ์ „์ฒด ์Šค์บ”

     

     


    ๐ŸŽฏ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

    โœ… ๋ฉด์ ‘๊ด€์ด ๋ณด๋Š” ํฌ์ธํŠธ

    1. ์ธ๋ฑ์Šค ์˜์‹: ํ•จ์ˆ˜ ์‚ฌ์šฉ์„ ํ”ผํ•˜๊ณ  ๋ฒ”์œ„ ์กฐ๊ฑด ํ™œ์šฉ
    2. ์ •ํ™•์„ฑ: ๋‚ ์งœ ๊ฒฝ๊ณ„ ์ฒ˜๋ฆฌ (00:00:00 ~ 23:59:59)
    3. ๊ฐ€๋…์„ฑ: ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•œ ์กฐ๊ฑด๋ฌธ ์ž‘์„ฑ
    4. ํ™•์žฅ์„ฑ: ๋‹ค๋ฅธ ๊ธฐ๊ฐ„์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ

    ๐Ÿšจ ํ”ผํ•ด์•ผ ํ•  ์‹ค์ˆ˜

    -- โŒ ๊ฒฝ๊ณ„ ์˜ค๋ฅ˜
    WHERE order_date BETWEEN '2023-10-01' AND '2023-10-31'  -- ์‹œ๊ฐ„ ๋ˆ„๋ฝ
    
    -- โŒ ์„ฑ๋Šฅ ์ €ํ•˜
    WHERE MONTH(order_date) = 10  -- ์ธ๋ฑ์Šค ๋ชป ํƒ
    
    -- โŒ ์‹œ๊ฐ„๋Œ€ ๋ฌด์‹œ
    WHERE DATE(created_at) = '2023-10-15'  -- ์‹œ๊ฐ„ ์ •๋ณด ์†์‹ค
    

    โœ… ์ •๋‹ต ํŒจํ„ด

    -- โœ… ์™„๋ฒฝํ•œ ์›” ๋ฒ”์œ„
    WHERE order_date >= '2023-10-01' AND order_date < '2023-11-01'
    
    -- โœ… ์™„๋ฒฝํ•œ ์ผ ๋ฒ”์œ„  
    WHERE created_at >= '2023-10-15 00:00:00' 
      AND created_at <= '2023-10-15 23:59:59'
    

    ํ•ต์‹ฌ ์š”์•ฝ: ํ•ญ์ƒ ๋ฒ”์œ„ ์กฐ๊ฑด(>=, <)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜๊ณ , ํ•จ์ˆ˜ ์‚ฌ์šฉ์€ ์ตœ๋Œ€ํ•œ ํ”ผํ•˜์„ธ์š”! ์ด๊ฒƒ๋งŒ ์ง€์ผœ๋„ ์ƒ์œ„ 20% ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.