[STARTERS 4๊ธฐ TIL] #28์ผ์ฐจ(23.03.16)


๐Ÿ—ฃ๏ธ ์ง€๋‚œ ๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ

๊ทธ๋ฃน ๊ณผ์ œโ‘ก 1์ฐจ ์ˆ˜์ •๋ณธ ํ”ผ๋“œ๋ฐฑ

2์กฐ ๋Œ€์‹œ๋ณด๋“œ

[1์กฐ]

 - ์–ด๋ ค์šด ๊ทธ๋ž˜ํ”„๋Š” ๋ณด๊ณ ์„œ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ด ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ญ๊ณ  ์™œ ํ•„์š”ํ•œ์ง€๋ถ€ํ„ฐ ์„ค๋ช…ํ•ด์•ผ ํ•จ

 

[2์กฐ]

- ๋Œ€์‹œ๋ณด๋“œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช… ํ•„์š”

- ๋ฆฌ๋ทฐ soso์— ๋Œ€ํ•œ ๋“ฑ๊ธ‰ ๊ธฐ์ค€ ์„ค๋ช… ํ•„์š”

- ์—ฐ๋„๋ณ„๋ณด๋‹ค๋Š” ๋ถ„๊ธฐ๋ณ„ ํ˜น์€ ๋‹ฌ๋ณ„

 

[3์กฐ]

- ๋Œ€๋ฌธ์ž ์†Œ๋ฌธ์ž ํ†ต์ผ

- ๋ฃธ ์ˆ˜์— ๋Œ€ํ•œ ์ ์ˆ˜ํ™”๊ฐ€ ํ•„์š”ํ•จ

- ๋ฆฌ๋ทฐ ์ ์ˆ˜์— ๋Œ€ํ•œ ์ ์ˆ˜ํ™”๊ฐ€ ํ•„์š”ํ•จ

 


๐Ÿ“š ์˜ค๋Š˜์˜  ํ•™์Šต

ํƒœ๋ธ”๋กœ ๊ฐ•์˜
์œ ๋‹ˆ์˜จ

- ์œ ๋‹ˆ์˜จ์€ ์กฐ์ธ๊ณผ ๋‹ฌ๋ฆฌ ์ปฌ๋Ÿผ์ด ๋ชจ๋‘ ๋™์ผํ•ด์•ผ ๊ฐ€๋Šฅ

- ์œ ๋‹ˆ์–ธ : ์ค‘๋ณต ์ œ์™ธํ•˜๊ณ  ๋‹ค ๋ถ™์ด๊ธฐ

- ์œ ๋‹ˆ์˜จ ALL : ์ค‘๋ณต ์žˆ๋”๋ผ๋„ ๋‹ค ๋ถ™์ด๊ธฐ

 

์กฐ์ธ

- ํšŒ์‚ฌ์—์„œ๋Š” inner ์กฐ์ธ์€ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๊ฐ€๋Šฅ์„ฑ์œผ๋กœ ์ž˜ ์“ฐ์ด์ง€ ์•Š์Œ

- ์ œ์ผ ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฑด left ์กฐ์ธ

- ๋™์ผ ์ปฌ๋Ÿผ์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ ๋ชจ๋‘ ์กฐ์ธ ์กฐ๊ฑด์— ํฌํ•จ์‹œ์ผœ์•ผ ํ•จ (ํ˜น์€ groupby๋กœ ์ปฌ๋Ÿผ์„ ๋ชจ๋‘ ๊ทธ๋ฃจํ•‘์‹œ์ผœ์•ผํ•จ)

 

ํ˜ผํ•ฉ๊ด€๊ณ„ ํŽธ์ง‘

- ์ปฌ๋Ÿผ๋ช…์€ ๋‹ค๋ฅด๋”๋ผ๋„ ์ปฌ๋Ÿผ ๋‚ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์–ด์•ผ ํ•œ๋‹ค!

 

๋Œ€์‹œ๋ณด๋“œ tip

- ๋„๊ตฌ์„ค๋ช…์— ๊ทธ๋ž˜ํ”„ → ๋ณด์ถฉ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ๋„ฃ์ž

- ๋Œ€์‹œ๋ณด๋“œ ํ•˜๋‹จ ํ˜น์€ ์ƒ๋‹จ : ๋ฐ์ดํ„ฐ ์›๋ณธ ์ด๋ฆ„, ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„

- ์™ธ๋ฉด๋‹นํ•œ ๋””๋น„, ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜๋ฉด ๋งํ•œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ ๊ฑฐ์ž„

 

๋‚ ์งœํ˜• ์—ฐ์Šต
1. DATEADD(date_part, interval, date)
date ์— date_part ๋‹จ์œ„์˜ interval์„ ๋”ํ•จ

ex) DATEADD('year', 2, #2021–08–02#)=2023–08–02 12:00:00AM

2. DATEDIFF(date_part, date1, date2, [start_of_week])
date1(์‹œ์ž‘์ผ)๊ณผ date2(์ข…๋ฃŒ์ผ) ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ date_part ๋‹จ์œ„๋กœ ๊ตฌํ•จ

์ด๋•Œ [start_of_week]๋Š” ์„ ํƒ์‚ฌํ•ญ์ด๋ฉฐ, 'sunday' ๋กœ ์ง€์ • ์‹œ, ์ผ์š”์ผ์ด ์ฃผ์˜ ์ฒซ๋ฒˆ์งธ ์š”์ผ๋กœ ๊ณ ๋ คํ•จ

ex) DATEDIFF('week', #2021–08–04#,#2021–08–07#)=0

ex) DATEDIFF('week', #2021–08–04#,#2021–08–07#, 'saturday')=1

์œ„์˜ ์˜ˆ์‹œ๋Š” ์›”์š”์ผ์„ ์ฃผ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์ผ๋กœ ๊ณ ๋ คํ•œ ๊ฒƒ -> 4์ผ(์ˆ˜)์™€ 8์ผ(์ผ)์€ ๊ฐ™์€ ์ฃผ->0

์•„๋ž˜์˜ ์˜ˆ์‹œ๋Š” ํ† ์š”์ผ์„ ์ฃผ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์ผ๋กœ ๊ณ ๋ คํ•œ ๊ฒƒ-> ์ˆ˜์š”์ผ๊ณผ ํ† ์š”์ผ์€ ๋‹ค๋ฅธ ์ฃผ-> 1

3. DATENAME(date_part, date, [start_of_week])
date์˜ date_part๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜

DATENAME('month', #2021–08–04#) = "August"

4. DATEPART(date_part,date,[start_of_week]
date์˜ date_part๋ฅผ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ˜ํ™˜

DATENAME('month', #2021–08–04#) = 8

5. DATEPARSE(date_format, [date_string])
date_string(๋ฌธ์ž์—ด)์„ date_format์˜ ํ˜•ํƒœ(๋‚ ์งœํ˜•)๋กœ ๋ฐ˜ํ™˜

ํŒŒ์‹ฑ ์ง„ํ–‰!!!!

ex) DATEPARSE('MMMM dd, YY', 'August 04, 21'). 
ex) left(str(DATEPARSE('MMMM dd, YY', 'August 04, 21')),10) =2021–08–04

6. DATERUNC(date_part, date, [start_of_week])
date ๊ธฐ์ค€ date๊ฐ€ ์†ํ•œ date-part ์˜ ์ฒซ์งธ ๋‚  ๋ฐ˜ํ™˜

ex) DATRUNC('quarter',#2021–08–04#)= 2021–07–01. 

ex) DATRUNC('month',#2021–08–04#)= 2021–08–01 

7. ISDATE(string)
string(๋ฌธ์ž์—ด)์ด ์œ ํšจํ•œ ๋‚ ์งœ๋ฉด true ๋ฐ˜ํ™˜

ex) ISDATE('August 4,2021')=true

8. MAKETIME(hour, minute, second)  ์‹œ,๋ถ„,์ดˆ๋กœ ๊ตฌ์„ฑ๋œ ๋‚ ์งœ๊ฐ’ ๋ฐ˜ํ™˜


ex) MAKETIME(16,24,00) = #16:24:00#  -> #์ฒ˜์Œ์—๋Š” ๋””ํดํŠธ๊ฐ’ ๋…„๋„,๋‹ฌ,์ผ + ์‹œ๊ฐ„ ๋‚˜์˜ด. ์šฐ ํด๋ฆญ ์ •ํ™•ํ•œ ๋‚ ์งœ ์„ ํƒ ์‹œ ์‹œ๊ฐ„๋งŒ ๋ณด์ด์ง€๋งŒ ์ธก์ •๊ฐ’์œผ๋กœ ๋ณ€ํ•จ + ์ปดํ“จํ„ฐ๋งˆ๋‹ค ์ธ์‹ ๋‹ค๋ฆ„.. ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ๋„ ๋‹ค๋ฐ˜์‚ฌ

9. MAX(expr1, expr2)            
a์™€ b์˜ ์ตœ๋Œ€๊ฐ’ ๋ฐ˜ํ™˜(๋™์ผํ•œ ์œ ํ˜•์ด์–ด์•ผ ํ•จ, ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ Null ์ด๋ฉด Null ๋ฐ˜ํ™˜)

ex) MAX('2021–01–01' ,'2021–03–01') = 2021–03–01 12:00:00 AM
or '2021-01-01' ๋ถ€๋ถ„์ด ์•„์˜ˆ date ํ˜•์‹์ด์–ด์•ผ ๊ฐ€๋Šฅ 

10. MIN(expr1, expr2)           
a์™€ b์˜ ์ตœ์†Œ๊ฐ’ ๋ฐ˜ํ™˜(๋™์ผํ•œ ์œ ํ˜•์ด์–ด์•ผ ํ•จ, ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ Null ์ด๋ฉด Null ๋ฐ˜ํ™˜)

ex) MIN('2021–01–01' ,'2021–03–01') = 2021–01–01 12:00:00 AM
or '2021-01-01' ๋ถ€๋ถ„์ด ์•„์˜ˆ date ํ˜•์‹์ด๋ฉด ๊ฐ€๋Šฅ 

11. YEAR(date)
์ฃผ์–ด์ง„ ๋‚ ์งœ์˜ ์—ฐ๋„๋ฅผ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜

ex)YEAR(#2021–08–15#) = 2021

12. MONTH(date)
์ฃผ์–ด์ง„ ๋‚ ์งœ๋ฅผ ์›”์˜ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜

ex) MONTH(#2021–08–15#) = 8

13. WEEK(date)
date์˜ ๋‚ ์งœ ์ฃผ๋ฅผ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜

ex) WEEK(#2021–04–15#)=16

14. DAY(date)
date์˜ ๋‚ ์งœ ์ผ์„ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜

ex) DAY(#2021–08–04#)=4

15. QUARTER(date)
date์˜ ๋ถ„๊ธฐ๋ฅผ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜

ex) QUARTER(#2021–08–04#)=3

16. TODAY()
ํ˜„์žฌ ๋‚ ์งœ ๋ฐ˜ํ™˜

TODAY()=2021–08–15

๐Ÿ’ป ์˜ค๋Š˜์˜  ๊ณผ์ œ

๊ทธ๋ฃน ๊ณผ์ œ : Airbnb ๋‰ด์š•์ง€์‚ฌ์žฅ์—๊ฒŒ ์ปจ์„คํŒ… ๋‚ด์šฉ์„ ๋ณด๊ณ ํ•˜์ž !

· ๋ณด๊ณ ์„œ ๊ตฌ์„ฑ(2์žฅ)

 โ‘  ๋ชฉํ‘œ(๋ณธ์งˆ)

 โ‘ก ํ˜„ํ™ฉ

 โ‘ข ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ถ”๊ฐ€์ ์ธ ์„ค๋ช…์ด ํ•„์š”ํ•œ ์ฐจํŠธ

 

· ๋Œ€์‹œ๋ณด๋“œ ์ตœ์ข… ์ˆ˜์ •

1์ฐจ ๋Œ€์‹œ๋ณด๋“œ / ์ตœ์ข… ๋Œ€์‹œ๋ณด๋“œ

 โ‘  ๋ถˆํ•„์š”ํ•œ ์ฐจํŠธ ์‚ญ์ œ → ๋งต ์ฐจํŠธ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•„ํ„ฐ ์ ์šฉ ์ง๊ด€์ ์œผ๋กœ !

 โ‘ก ๋ฆฌ๋ทฐ soso ๋“ฑ๊ธ‰ ์ค‘ ๊ตฌ๋ถ„ ๊ธฐ์ค€์„ ๊ฐ€๊ฒฉ์—์„œ ๋ฆฌ๋ทฐ ๊ฐœ์ˆ˜๋กœ ๋ณ€๊ฒฝ → ๋ฆฌ๋ทฐ ์‹ ๋ขฐ๋„ ๊ตฌ๋ถ„ !