-
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์ด โ ์ ์ฒด ์ค์บ
๐ฏ ์ฝ๋ฉํ ์คํธ ์ฒดํฌ๋ฆฌ์คํธ
โ ๋ฉด์ ๊ด์ด ๋ณด๋ ํฌ์ธํธ
- ์ธ๋ฑ์ค ์์: ํจ์ ์ฌ์ฉ์ ํผํ๊ณ ๋ฒ์ ์กฐ๊ฑด ํ์ฉ
- ์ ํ์ฑ: ๋ ์ง ๊ฒฝ๊ณ ์ฒ๋ฆฌ (00:00:00 ~ 23:59:59)
- ๊ฐ๋ ์ฑ: ์๋๊ฐ ๋ช ํํ ์กฐ๊ฑด๋ฌธ ์์ฑ
- ํ์ฅ์ฑ: ๋ค๋ฅธ ๊ธฐ๊ฐ์ผ๋ก ์ฝ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ตฌ์กฐ
๐จ ํผํด์ผ ํ ์ค์
-- โ ๊ฒฝ๊ณ ์ค๋ฅ 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% ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค. ๐
๋ฐ์ํ'Programing Language > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค_๋์ฅ๊ท ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ถ๋ฅํ๊ธฐ 2 (0) 2025.06.14 DAYOFWEEK ํจ์ (0) 2025.06.14 CTE(Common Table Expression) ์๋ฒฝ ์ดํด ๊ฐ์ด๋ (1) 2025.06.13 ํ๋ก๊ทธ๋๋จธ์ค_๋ฉธ์ข ์๊ธฐ์ ๋์ฅ๊ท ์ฐพ๊ธฐ (0) 2025.06.13 ํ๋ก๊ทธ๋๋จธ์ค_๋์ฌ ๊ธฐ๋ก์ด ์กด์ฌํ๋ ์๋์ฐจ ๋ฆฌ์คํธ ๊ตฌํ๊ธฐ (1) 2025.06.13