날짜 관련 질문
308
작성한 질문수 4
안녕하세요!
-- 고객명 Antonio Moreno이 1997년에 주문한 주문 정보를 주문 아이디, 주문일자, 배송일자, 배송 주소를 고객 주소와 함께 구할것.
이 문제에서, 1997년에 주문한 주문 정보 where절 작성할 때
where b.order_date between '19970101' and '19971231'
이렇게 작성해도 1997년 주문 정보가 추출이 되는 거 같은데, 강의에서
between to_date('19970101', 'yyyymmdd') and to_date('19971231', 'yyyymmdd')
이렇게 to_date라고 쓰신 이유가 따로 있을까요?!
답변 1
0
안녕하십니까,
order_date는 명확하게 Date 타입 컬럼입니다.
때문에 order_date가 where 조건으로 비교될 때 Date값으로 비교해 주는게 좋습니다.
적어주신대로 where b.order_date between '19970101' and '19971231' 같이 SQL을 사용하면 order_date가 Date 컬럼인데 문자열인 '19970101', '19971231'로 비교하기 때문에 DB에서 SQL을 내부적으로 자동 변경하게 됩니다.
즉 where b.order_date between '19970101' and '19971231' 로 SQL을 적었지만 DB내의 SQL Parser에서 내부적으로 where to_char(b.order_date, 'yyyymmdd') between '19970101' and '19971231' 와 같이 order_date를 to_char(order_date, 'yyyymmdd')로 문자열로 변경하여 비교를 하게 됩니다.
해당 과정은 사용자에게 보여지지 않기 때문에 where b.order_date between '19970101' and '19971231' 를 적용해도 동일한 결과가 나오지만 만약 order_date에 index가 달려 있다면 where to_char(b.order_date, 'yyyymmdd') between '19970101' and '19971231' 는 order_date를 to_char로 변경하기 때문에 index를 타지 못해서 SQL 성능 저하가 발생할 수 있습니다.
요약 드리자면 Date 타입의 컬럼을 where절에서 비교하고자 한다면 Date 값으로 비교하는 게 정석이며, String값으로 비교할 수도 있지만 이는 DB내부적으로 SQL 변환이 일어나서 가능한 것이며, 성능 저하가 발생할 우려를 가지고 있습니다.
감사합니다.
최신버젼 다운로드
0
28
2
'레벨 유지'의 의미에 대한 질문
0
57
2
date_part
0
57
2
lag/lead offset 관련 질문
0
58
2
join 관련 질문 (inner join, left join)
1
103
2
배치에서 full outer join을 쓴다고 하셨는데 예시를 알 수 있을까요?
0
92
2
Madrid에 살고 있는 고객이 주문한 주문 정보를 구할것. 실습 질문드립니다
0
55
2
rollup시 null값 매출 라벨링
0
56
2
10. 조인 실습 - 02 관련 질문
0
62
1
조인실습03 - join의 pk-fk join
0
111
2
조인실습03 - join의 pk-fk join
0
71
2
(공유)맥, 스키마 import
0
82
2
sql 입문자인데, 이 강의와 sql 코딩테스트와 연관이 있을까요?
0
139
2
1인지 M인지는 결국엔 테이블을 직접 확인을 해야 하는걸까요?
0
133
2
안녕하세요. 튜닝핵심가이드강의 관련해서 여쭤보고 싶어서 남깁니다.
0
93
1
섹션5 Group by 실습-01 강의 예제 질문
0
121
2
섹션2 조인 기반 메커니즘에서 조인 실습 - 04 강의 예제 질문
0
125
2
섹션2 조인 실습 01 강의 질문
0
135
2
lead lag 이해 강의에서 윈도우 절은 사용되지 않습니다.
0
129
1
Dbeaver오류
0
636
2
직원 별 가장 높은 매출
0
119
1
강의순서대로 실습코드순알려주세요.
0
134
1
m:n inner join일 경우 cross조인과 동일하게 동작되는건가요?
0
132
1
rollup
0
91
2





