• Home
  • About
    • ๊น€์—ฐ์ค‘ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ๐Ÿš€ photo

      ๊น€์—ฐ์ค‘ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ๐Ÿš€

      ๊ฐœ๋ฐœ๊ณผ ๋‚˜์˜ ์ƒ๊ฐ๋“ค

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
  • ๊ฐœ๋ฐœ์ผ๊ธฐ
  • ๋‚˜์˜ ์ƒ๊ฐ
  • C#
  • ASP.net
  • DataBase
  • CS์ง€์‹
  • ์„ฑ์žฅ์ผ๊ธฐ
  • JavaScript

[MSSQL] ๋‚ ์งœ๐Ÿ“… ๊ทผ์‚ฌ๊ฐ’ ๊ตฌํ•˜๊ธฐ

2022-04-16 09:02:40

Reading time ~2 minutes

์ž…๋ ฅ๋œ ๋‚ ์งœ์™€ ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ์‹œ์ €๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž ๐ŸŽจ




๐Ÿ“Œ ์˜ค๋Š˜์˜ ์ฃผ์ œ


Q. ์–ด๋–ค ํŠน๋ณ„ํ•œ ๋‚ ์งœ๋“ค(ex. ์šฐ๋ฆฌ๋‚˜๋ผ ํœด์ผ ๋‚ ์งœ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ)์ด ๊ธฐ๋ก๋œ ํ…Œ์ด๋ธ” A๊ฐ€ ์žˆ์„ ๋•Œ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์ž‘์œ„์˜ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๋‚ ์งœ์™€ ์ œ์ผ ๊ฐ€๊นŒ์šด ๋‚ ์งœ๋ฅผ ํ…Œ์ด๋ธ” A์—์„œ ์ฐพ์•„๋‚ด๋Š” ์—…๋ฌด๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”!

์œ„์™€ ๊ฐ™์€ ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž!



๐Ÿ—ƒ๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค


์—…๋ฌด์—์„œ ์ฃผ์–ด์ง„ ํ…Œ์ด๋ธ” A๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฌด์ž‘์œ„์˜ ๋‚ ์งœ ํ…Œ์ด๋ธ”๋กœ ์กด์žฌํ•œ๋‹ค.

ํ…Œ์ด๋ธ” A (2021๋…„์˜ ๋ฌด์ž‘์œ„ ๋‚ ์งœ๊ฐ€ ์ €์žฅ๋œ ํ…Œ์ด๋ธ”)

'SELECT * FROM A' ์˜ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์ด๋‹ค.



๐Ÿ“– ํ•ด๊ฒฐ์ „๋žต


๋จผ์ €, ๊ทผ์ ‘ํ•œ ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
๋Œ€์‹  ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ํ•ด๋‹น ์—…๋ฌด๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์งœ๋ฉด ๋œ๋‹ค!

โ€˜์ œ์ผ ๊ฐ€๊นŒ์šด ๋‚ ์งœโ€™ ๋ผ๋Š” ๊ฒƒ: ๋‘ ๋‚ ์งœ์˜ ์ฐจ๊ฐ€ ์ ์€ ๊ฒƒ์„ ๋œปํ•œ๋‹ค.
์ˆ˜ํ•™์—์„œ ๋‘ ์ˆ˜์˜ ์ฐจ๋Š” ํ•ญ์ƒ ์–‘์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค. ์™œ? ๋‘ ์ˆ˜์˜ ์ฐจ์ด๋Š” ์ƒ๋Œ€์ ์ธ ๊ฐœ๋…์ด๋ฏ€๋กœ ๋‘ ์ˆ˜๊ฐ€ ๋–จ์–ด์ง„ ๊ฑฐ๋ฆฌ๋ฅผ ๋งํ•œ๊ฑฐ๋‹ˆ๊นŒ.
๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋‘ ์ˆ˜์˜ ์ฐจ๋ฅผ ๊ตฌํ•  ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋‘ ์ˆ˜์˜ ์ฐจ
\(|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์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค.
๋Œ€์‹ , ์ž„์˜์˜ ๋‚ ์งœ๋Š” ์ ˆ๋Œ€์ ์ธ ๊ธฐ์ค€์ด ๋˜์•ผํ•˜๋ฏ€๋กœ ์ ์ ˆํ•œ ๋‚ ์งœ๋ฅผ ๊ณ ์ •์‹œ์ผœ๋‘ฌ์•ผ ํ•œ๋‹ค! ์ž์„ธํ•œ ๊ฒƒ์€ ์•„๋ž˜ ์—…๋ฌด์ฟผ๋ฆฌ์—์„œ!!



๐Ÿ”จ ์ฟผ๋ฆฌ ์ž‘์„ฑ


  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์ž‘์œ„ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค๋Š” ๊ฐ€์ •์ด ์กด์žฌํ•˜๋ฏ€๋กœ, ์ž…๋ ฅ๊ฐ’์„ ์ž„์˜๋กœ ์ •์˜ํ•œ๋‹ค.
  2. ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋‚ ์งœ๋ฅผ Tick๊ฐ’ํ™” ํ•œ๋‹ค. (์—ฌ๊ธฐ์„œ๋Š” ์ ˆ๋Œ€์ ์ธ ๋น„๊ต ๋‚ ์งœ๋ฅผ 1900-01-01๋กœ ์ง€์ •ํ–ˆ๋‹ค.)
  3. ์กฐํšŒ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•œ๋‹ค.
  4. ํ…Œ์ด๋ธ” A์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ๋‚ ์งœ๋ฅผ DATEDIFF(DAY, ๋‚ ์งœ, ์ปฌ๋Ÿผ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Tick๊ฐ’ํ™” ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ๋งŒ๋“ ๋‹ค.
  5. ์ˆœ์„œ๋ฅผ 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โ€™๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๊ฒฐ๊ณผ

์œ„ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ, ๋‚ ์งœ โ€˜2021-06-12โ€™ ์˜ Tick๊ฐ’ โ€˜44357โ€™ ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋œ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์˜ค๋Š˜ ์ด๋ ‡๊ฒŒ ๊ท€์ฐฎ์Œ์„ ์ด๊ธฐ๊ณ  ์ฒซ ๊ธฐ์ˆ  ํฌ์ŠคํŒ…์„ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค!!
๋‹ค์Œ์— ๋”์šฑ ์•Œ์ฐฌ ์ •๋ณด๋กœ ์ฐพ์•„๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค ์—ฌ๋Ÿฌ๋ถ„!!

- Thank You !! -


Share Tweet +1