๋ ๋ ์ง ์ฌ์ด์ ๋ถ, ์ด, ์, ์ผ, ์ฃผ, ์, ๋ถ๊ธฐ, ์ฐ๋ ๊น์ง์ ์ฐจ์ด๋ฅผ ์์ฝ๊ฒ ๊ตฌํด์ฃผ๋ SQL ํจ์๊ฐ ์์ต๋๋ค.
๋ฐ๋ก TIMESTAMPDIFF์ธ๋ฐ์!
TIMESTAMPDIFF
TIMESTAMPDIFF ํ์ฉ ์์
์๋ฅผ๋ค์ด 2021๋ 1์ 1์ผ๊ณผ 2022๋ 1์1์ผ ์ฌ์ด์ ๋ช ๋ถ์ด ์กด์ฌํ๋์ง, ๋ช ์ด๊ฐ ์กด์ฌํ๋์ง, ๋ช ์๊ฐ์ ์ฐจ์ด๊ฐ ๋๋์ง,
๊ทธ๋ฆฌ๊ณ ๋ฉฐ์น (365์ผ), ๋ช์ฃผ, ๋ช๋ฌ(12๊ฐ์), ๋ช ๋ถ๊ธฐ(4๋ถ๊ธฐ), ๋ช๋ ์ฐจ์ด๊ฐ ๋๋์ง ๊ตฌํด์ฃผ๋ ํจ์์ ๋๋ค.
์ด ํจ์๋ฅผ ํตํด์ ์ด๋ ํ ์ฌ๋์ด ์ ์ฌ์ผ๋ก๋ถํฐ ํ์ฌ๊น์ง ์ผํ ์ผ์๋ ์ฐ์ฐจ ๋ฑ์ ๊ตฌํ ์ ์๊ฒ ์ต๋๋ค.
๋ํ ๋๋ฐ์ด, ์ด๋ ํ ๋ ๊น์ง ๋จ์ ์ผ์๋ ์๊ฐ์ ๊ตฌํด์ค ์๋ ์์ต๋๋ค.
์ด, ๋ถ, ์๊ฐ, ์ผ์, ์ฃผ์ฐจ, ์์ฐจ, ๋ถ๊ธฐ, ์ฐ์ฐจ ๋ค์ํ๊ฒ ๊ตฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ํ์ฉ๋๊ฐ ๊ต์ฅํ ๋์ SQL ์ฟผ๋ฆฌ ํจ์ ์ ๋๋ค.
TIMESTAMPDIFF SQL ์ฟผ๋ฆฌ
1. ๋ ๋ ์ง ์ฌ์ด์ ์ด ์ฐจ์ด ๊ตฌํ๊ธฐ
์ด ์ฐจ์ด ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(SECOND, '20220718', '20230101');
--SELECT TIMESTAMPDIFF(SECOND, ์์์ผ, ์ข
๋ฃ์ผ);
์ ๋ ์ค๋๋ถํฐ ๋ด๋ 1์1์ผ๊น์ง ๋จ์ ์ด๋ฅผ ๊ณ์ฐํด๋ณด๋ ค๊ณ ์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด๋ณด์์ต๋๋ค.
๋ชจ๋ ๋ ์ง ๊ณ์ฐ ๊ธฐ์ค์ 00์00๋ถ00์ด ๊ธฐ์ค์ ๋๋ค.
์คํ๊ฒฐ๊ณผ
1์ต4428๋ง8๋ฐฑ ์ด๊ฐ ๋จ์๋ค์. ์๊ฐ๋ณด๋ค ์ผ๋ง ์๋๋ ์์น ๊ฐ๊ธฐ๋ ํฉ๋๋ค.
ํน์ ์๊ฐ๊ณผ ์ด ๊น์ง๋ ์ง์ ํด์ค ์ ์์ต๋๋ค.
ํน์ ์๊ฐ ์ฐจ์ด์ ์ด ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(SECOND, '2022-07-18 10:00:00', '2023-01-01 00:00:00');
์คํ๊ฒฐ๊ณผ
๋ ์ง ํ์๋ง ์์ ๊ฐ์ด ๋ง์ถ์ด ์ฃผ์๋ฉด ํน์ ๋ ์ง ์ฌ์ด์ ์ด ์ฐจ์ด๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค.
์ด๋ ์๋ ๋ถ, ์๊ฐ, ๋ถ๊ธฐ ๋ฑ ๋ชจ๋ ๊ฒฝ์ฐ์์๋ ๊ฐ๋ฅํ ํํ์ ๋๋ค.
์๊ฐ์ ์ง์ ํด์ฃผ๊ณ ์ถ์ผ์๋ค๋ฉด, ๋ ์ง ํ์์ 'YYYY-MM-DD ์๊ฐ:๋ถ:์ด' ๋ก ๋ง์ถ์ด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
2. ๋ ๋ ์ง ์ฌ์ด์ ๋ถ ์ฐจ์ด ๊ตฌํ๊ธฐ
๋ถ ์ฐจ์ด ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(MINUTE, '20220718', '20230101');
SELECT TIMESTAMPDIFF(MINUTE, ์์์ผ, ์ข
๋ฃ์ผ);
์คํ๊ฒฐ๊ณผ
์๊น์ ๊ฐ์ด ์ค๋๋ถํฐ ๋ด๋ 1์ 1์ผ๊น์ง ๋จ์ ๋ถ์ ๊ตฌํด๋ณด์์ต๋๋ค.
์ด๋ฅผ ๊ตฌํ ๋์ ๋๊ฐ์ด ๋ถ ์ด ์๊ฐ์ ์ง์ ํด์ฃผ์ ๋ ๋ฉ๋๋ค.
3. ๋ ๋ ์ง ์ฌ์ด์ ์๊ฐ ์ฐจ์ด ๊ตฌํ๊ธฐ
์๊ฐ ์ฐจ์ด ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(HOUR, '20220718', '20230101');
SELECT TIMESTAMPDIFF(HOUR, ์์์ผ, ์ข
๋ฃ์ผ);
์คํ๊ฒฐ๊ณผ
4. ๋ ๋ ์ง ์ฌ์ด์ ์ผ ์ฐจ์ด ๊ตฌํ๊ธฐ
์ผ ์ฐจ์ด ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(DAY, '20220718', '20230101');
SELECT TIMESTAMPDIFF(DAY, ์์์ผ, ์ข
๋ฃ์ผ);
์คํ๊ฒฐ๊ณผ
์ด์ฏค๋๋ ๊ถ๊ธํ ์ ์ด ์๊ฒผ์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ ์ง ์ฐจ์ด๊ฐ 1์ผ ํ๊ณ ๋ 12์๊ฐ์ด๋ผ๋ฉด, ๊ฒฐ๊ณผ๋ 1์ผ๋ก ๋์ฌ๊น์? ์๋๋ฉด 2์ผ๋ก ๋์ฌ๊น์?
์ผ์ ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(HOUR, '2022-07-18 00:00:00', '2022-07-19 12:00:00') as h,
TIMESTAMPDIFF(DAY, '2022-07-18 00:00:00', '2022-07-19 12:00:00') as d;
7์ 18์ผ 00์๋ถํฐ 19์ผ 12์๊น์ง์ ์๊ฐ ์ฐจ์ด์ ์ผ์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ ์ฟผ๋ฆฌ์ ๋๋ค.
์คํ๊ฒฐ๊ณผ
๋ณด์๋ ๊ฒ์ฒ๋ผ ๋ ๋ ์ง ์ฌ์ด์ ์๊ฐ์ 36์๊ฐ์ผ๋ก 1์ผ ํ๊ณ ๋ 12์๊ฐ์ด ๋ ์์ผ๋,
๋ฐ์ฌ๋ฆผ์ ํ์ง ์๊ณ ์๊ฐ์ ๋ฒ๋ ค 1์ผ๋ก ์ถ๋ ฅํด์ฃผ๋ ๊ฒ์ ํ์ธํ์ค ์ ์์ต๋๋ค.
1์ผ ํ๊ณ ๋ 23์๊ฐ์ด๋ผ๊ณ ํด๋ ์ผ์ ์ฐจ์ด ๊ฒฐ๊ณผ๋ ๋๊ฐ์ด 1์ผ์ ๋๋ค.
5. ๋ ๋ ์ง ์ฌ์ด์ ์ฃผ ์ฐจ์ด ๊ตฌํ๊ธฐ
์ฃผ ์ฐจ์ด ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(WEEK, '20220718', '20230101');
์คํ๊ฒฐ๊ณผ
์ ๊น, ์ํด๊น์ง 23์ฃผ๋ฐ์ ๋จ์ง ์์๋ค๊ตฌ์..?
6. ๋ ๋ ์ง ์ฌ์ด์ ์ ์ฐจ์ด ๊ตฌํ๊ธฐ
๊ฐ์ ์ ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(MONTH, '20220718', '20230101');
22๋ 7์ 18์ผ๋ถํฐ 23๋ 1์ 1์ผ๊น์ง์ ์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ ์ฟผ๋ฆฌ์ ๋๋ค.
8,9,10,11,12 ์ด 5๊ฐ์์ด ์ถ๋ ฅ๋ ๊ฒ์ผ๋ก ์์๋๋๋ฐ์.
์คํ๊ฒฐ๊ณผ
๋ง์ต๋๋ค. ๋ ๋ ์ง ์ฐจ์ด๊ฐ 5๊ฐ์ ํ๊ณ ๋ 2์ฃผ ์ ๋ ๋์ต๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์์ ๊ณ์ฐ ๊ฒฐ๊ณผ์ฒ๋ผ ๋๋จธ์ง๋ ๋ฒ๋ฆฌ๊ณ 5 ๋ง์ ์ถ๋ ฅํด์ค๋๋ค.
7. ๋ ๋ ์ง ์ฌ์ด์ ๋ถ๊ธฐ ์ฐจ์ด ๊ตฌํ๊ธฐ
๋ถ๊ธฐ ์ฐจ์ด ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(QUARTER, '20220718', '20230101');
์คํ๊ฒฐ๊ณผ
ํ๋ฐ๊ธฐ 1๋ถ๊ธฐ๋ง ๋จ์ ๊ฒ์ผ๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
8. ๋ ๋ ์ง ์ฌ์ด์ ๋ ์ฐจ์ด ๊ตฌํ๊ธฐ
์ฐ์ฐจ ๊ตฌํ๋ ์ฟผ๋ฆฌ
SELECT TIMESTAMPDIFF(YEAR, '20220718', '20230101') as zero,
TIMESTAMPDIFF(YEAR, '20220718', '20230718') as one;
22๋ 7์ 18์ผ๋ถํฐ 23๋ 1์ 1์ผ๊น์ง๋ 1๋ ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ 0์ผ๋ก ์ถ๋ ฅ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ 23๋ 7์ 18์ผ์ด ๋๋ ์๊ฐ ๋ฑ 1๋ ์ฐจ๊ฐ ์ฑ์์ง๊ฒ ์ฃ ?
์คํ๊ฒฐ๊ณผ
๊น๋ํ๊ฒ ์ถ๋ ฅ๋๋ ๋ชจ์ต์ ๋๋ค.
์ด๋ฅผ ์ ํ์ฉํ์ ์ ํจ์จ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค :)
๋๊ธ