์ ๋ ฅ๋ ๋ ์ง์ ๊ฐ์ฅ ๊ทผ์ ํ ๋ ์ง๋ฅผ ๊ตฌํ๋ ํ๋ก์์ ๋ฅผ ๋ง๋ค์ด๋ณด์ ๐จ
๐ ์ค๋์ ์ฃผ์
Q. ์ด๋ค ํน๋ณํ ๋ ์ง๋ค(ex. ์ฐ๋ฆฌ๋๋ผ ํด์ผ ๋ ์ง ํ ์ด๋ธ์ฒ๋ผ)์ด ๊ธฐ๋ก๋ ํ ์ด๋ธ A๊ฐ ์์ ๋, ์ฌ์ฉ์๊ฐ ๋ฌด์์์ ๋ ์ง๋ฅผ ์ ๋ ฅํ๋ฉด ํด๋น ๋ ์ง์ ์ ์ผ ๊ฐ๊น์ด ๋ ์ง๋ฅผ ํ ์ด๋ธ A์์ ์ฐพ์๋ด๋ ์ ๋ฌด๋ฅผ ์งํํด์ฃผ์ธ์!
์์ ๊ฐ์ ์ ๋ฌด๋ฅผ ์ฒ๋ฆฌํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์!
๐๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค
์ ๋ฌด์์ ์ฃผ์ด์ง ํ ์ด๋ธ A๋ ์๋์ ๊ฐ์ด ๋ฌด์์์ ๋ ์ง ํ ์ด๋ธ๋ก ์กด์ฌํ๋ค.
ํ ์ด๋ธ A (2021๋ ์ ๋ฌด์์ ๋ ์ง๊ฐ ์ ์ฅ๋ ํ ์ด๋ธ)
![](/assets/img/sql/2022-04-16/date.jpg)
๐ ํด๊ฒฐ์ ๋ต
๋จผ์ , ๊ทผ์ ํ ๋ ์ง๋ฅผ ๊ตฌํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ํจ์๋ ์กด์ฌํ์ง ์๋๋ค.
๋์ ์ ์ฌํ ๊ธฐ๋ฅ์ ํ๋ ์ฌ๋ฌ ํจ์๋ฅผ ์กฐํฉํ์ฌ ํด๋น ์
๋ฌด๋ฅผ ์งํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง๋ฉด ๋๋ค!
โ์ ์ผ ๊ฐ๊น์ด ๋ ์งโ ๋ผ๋ ๊ฒ: ๋ ๋ ์ง์ ์ฐจ๊ฐ ์ ์ ๊ฒ์ ๋ปํ๋ค.
์ํ์์ ๋ ์์ ์ฐจ๋ ํญ์ ์์๊ฐ ๋์จ๋ค. ์? ๋ ์์ ์ฐจ์ด๋ ์๋์ ์ธ ๊ฐ๋
์ด๋ฏ๋ก ๋ ์๊ฐ ๋จ์ด์ง ๊ฑฐ๋ฆฌ๋ฅผ ๋งํ๊ฑฐ๋๊น.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ ์์ ์ฐจ๋ฅผ ๊ตฌํ ๋, ๋ค์๊ณผ ๊ฐ์ ์์ ์ฌ์ฉํ๋ค.
๋ ์์ ์ฐจ
\(|x - y|\)
SQL์ ์ ๋๊ฐ์ ๊ตฌํ๋ ํจ์๊ฐ ์๋ค. ๊ทธ๊ฒ์ ๋ฐ๋ก ABS()
!!
5๋ถํฐ 10000๊น์ง์ 5์ ๋ฐฐ์ ์ค, 4633๊ณผ ์ ์ผ ๊ฐ๊น์ด ๊ฐ์ ๊ตฌํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
ABS()
์ ๋น๊ตํ๊ณ ์ ํ๋ ๋ ์๋ฅผ -์ฐ์ฐํ์ฌ ์ ๋๊ฐ์ ๊ตฌํด์ฃผ๋ฉด ๋ ์์ ์ฐจ๋ฅผ ์ ์ ์๋ค.
์ด ๋ ์์ ์ฐจ๊ฐ ๊ฐ์ฅ ์ ์ ์๊ฐ โ์ ์ผ ๊ฐ๊น์ด ์โ ๋ก ๋ณผ ์ ์๋ค.
5๋ถํฐ 10000๊น์ง์ 5์ ๋ฐฐ์๋ฅผ ABS(4633 - 5)
, ABS(4633 - 10)
, ABS(4633 - 15)
โฆ ์ด๋ฐ ์์ผ๋ก ์งํํ๋ค๋ฉด
๊ฒฐ๊ณผ์ ์ผ๋ก 4633๊ณผ 4635์ ์ฐจ๊ฐ 2๋ผ๋ ๊ฐ์ผ๋ก ๊ฐ์ฅ ์๋ค.
์ด๋ฌํ ์๋ฆฌ๋ก ๋ ์ง์ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ์ ์ ์์๋๋ก ์ ๋ ฌํ๋ค๋ฉด, ๋ฌด์์์ ๋ ์ง์ ๋ํด ์ ์ผ ๊ฐ๊น์ด ๋ ์ง๋ฅผ ์ฐพ์ ์ ์๋ค.
โฆ
๊ทผ๋ฐ, ์ง๊ธ๊น์ง ์์ฑํ ๋ด์ฉ์ โ์โ์ ํด๋น๋ ๋ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด์ง, โ๋ ์งโ์ ๊ฒฝ์ฐ์๋ ์ ์ฉํ ์ ์๋ค.
๊ทธ๋ผ ๋ ์ง๋ฅผ ์๋ก ๋ฐ๊พธ๋ฉด ๋๋ค!
๋ณธ๋, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ Tick๊ฐ์ ์ง์ํ๊ฒ ์ง๋ง, SQL์๋ Tick๊ฐ์ด๋ผ๋ ๊ฐ๋
์ด ์๋๋ผ โฆ
๊ทธ๋ฌ๋ฏ๋ก ์ง์ ๋ ์ง๋ฅผ ์๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค. (๋๋ง์ Tick๊ฐ์ ๋ง๋๋ ๊ฒ!)
๋ ์ง๋ฅผ ์๋ก ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ DATEDIFF(DAY, ๋ ์ง, ์ปฌ๋ผ)
์ ์ฌ์ฉํ์ฌ ๋ ์ง์ ์ผ ์ ์ฐจ์ด๋ฅผ Tick์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ค.
๋์ , ์์์ ๋ ์ง๋ ์ ๋์ ์ธ ๊ธฐ์ค์ด ๋์ผํ๋ฏ๋ก ์ ์ ํ ๋ ์ง๋ฅผ ๊ณ ์ ์์ผ๋ฌ์ผ ํ๋ค! ์์ธํ ๊ฒ์ ์๋ ์
๋ฌด์ฟผ๋ฆฌ์์!!
๐จ ์ฟผ๋ฆฌ ์์ฑ
- ์ฌ์ฉ์๊ฐ ๋ฌด์์ ๋ ์ง๋ฅผ ์ ๋ ฅํ๋ค๋ ๊ฐ์ ์ด ์กด์ฌํ๋ฏ๋ก, ์ ๋ ฅ๊ฐ์ ์์๋ก ์ ์ํ๋ค.
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ ์ง๋ฅผ Tick๊ฐํ ํ๋ค. (์ฌ๊ธฐ์๋ ์ ๋์ ์ธ ๋น๊ต ๋ ์ง๋ฅผ 1900-01-01๋ก ์ง์ ํ๋ค.)
- ์กฐํ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ค.
- ํ
์ด๋ธ A์ ํด๋นํ๋ ๋ชจ๋ ๋ ์ง๋ฅผ
DATEDIFF(DAY, ๋ ์ง, ์ปฌ๋ผ)
๋ฅผ ์ฌ์ฉํ์ฌ Tick๊ฐํ ํ์ฌ ์๋ก์ด ์ปฌ๋ผ์ ๋ง๋ ๋ค. - ์์๋ฅผ Tick๊ฐ์ ์ฐจ์ด๊ฐ ์ ์ ์์๋ก ์ ๋ ฌํ๋ค.
-- 1. ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ ์ง
DECLARE @INPUT_DT DATE = '20210612' -- ์ฌ์ฉ์๊ฐ ์์๋ก 20210612๋ฅผ ์
๋ ฅํ๋ค๊ณ ๊ฐ์ ํ์!
-- 2. ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ ์ง๋ฅผ Tickํ ์ํจ ๊ฐ (44357)
DECLARE @INPUT_TICK INT = DATEDIFF(DAY, '1900-01-01', @INPUT_DT)
-- 3. ์กฐํ ์ฟผ๋ฆฌ๋ฌธ ์์ฑ ์์!
SELECT DATE_DT,
TICK_NO = DATEDIFF(DAY, '1900-01-01', DATE_DT) -- 4. TICK๊ฐ์ ๊ณ์ฐํ์ฌ ์ ์ฅํ ์ปฌ๋ผ
FROM A
ORDER BY ABS(TICK_NO - @INPUT_TICK) -- 5. TICK๊ฐ์ ์ฐจ์ด๊ฐ ์ ์ ์์๋ก ์ ๋ ฌ
โญ ๊ฒฐ๊ณผ
์ฌ์ฉ์๊ฐ ๋ ์ง โ2021-06-12โ๋ฅผ ์ ๋ ฅํ์ ๋ ๊ฒฐ๊ณผ
![](/assets/img/sql/2022-04-16/result.jpg)
์ ๊ฒฐ๊ณผ์ฒ๋ผ, ๋ ์ง โ2021-06-12โ ์ Tick๊ฐ โ44357โ ๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ์์๋๋ก ์ ๋ ฌ๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
์ค๋ ์ด๋ ๊ฒ ๊ท์ฐฎ์์ ์ด๊ธฐ๊ณ ์ฒซ ๊ธฐ์ ํฌ์คํ
์ ์งํํด๋ณด์๋ค!!
๋ค์์ ๋์ฑ ์์ฐฌ ์ ๋ณด๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค ์ฌ๋ฌ๋ถ!!