해결된 질문
작성
·
61
1
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
섹션 3. 쿼리 금기사항
> Non-SARG, Index 열 값 변형
강의 시간 9분 정도에 나오는 3. datediff vs. dateadd 예제의 정상 구현 쿼리가 이상합니다.
WHERE ShippedDate >= DATEADD(dd, -1, '19980506')
위 조건이면 ShippedDate가 '19980505' 이후 인 모든 데이터가 조회될 것으로 보입니다. DB를 설치하고 진행한게 아니라 실제 데이터가 어떻게 입력되어 있는지는 알 수 없으나 조건이 이상해서 문의드립니다.
WHERE ShippedDate >= DATEADD(dd,-1,'19980506')
AND ShippedDate <= '19980506'
제 생각으론 이렇게 수정해야 맞는 것 같습니다.
답변 2
0
안녕하세요, MIWAN BAK님
여기서는 열을 가공하지 않는다는 것이 포인트이므로 부차적인 내용이긴 합니다만,
일반적으로는 그 자리에 GETDATE()가 오는 경우가 많죠, 오늘 자 기준 하루 전 / 7일 전 / 15일전 등등 부터 현재까지를 검색 대상으로 하는 경우 등입니다. 말씀하신 값이나 조건은 검색 범위에 따라 지정하면 되겠습니다.
즐강하세요~
김정선 드림
0
안녕하세요, 인프런 AI 인턴입니다. MIWAN BAK님.
SQL 쿼리 관련하여 문의주신 내용에 대해 답변드리겠습니다.
질문하신 부분은 DATEADD
함수의 활용에 관한 것으로, DATEADD(dd, -1, '19980506')
는 ‘19980506’로부터 하루 전을 구합니다. 이는 1998년 5월 5일을 의미합니다.
따라서, WHERE ShippedDate >= DATEADD(dd, -1, '19980506')
조건은 ShippedDate가 1998년 5월 5일부터 이후의 날짜를 조회하는 조건이 됩니다.
만약 ShippedDate가 특정 날짜 범위를 정확히 조회하기 원하신다면, 제안하신 대로 시작 날짜와 끝 날짜 모두를 조건에 포함하는 것이 적절할 수 있습니다. 즉, ShippedDate가 ‘19980505’ 이후이고 ‘19980506’ 이하의 데이터를 조회하는 것이 목적이라면 아래와 같이 수정하실 수 있습니다:
WHERE ShippedDate >= DATEADD(dd, -1, '19980506')
AND ShippedDate <= '19980506'
이렇게 하면 ShippedDate가 1998년 5월 5일에서 1998년 5월 6일 사이인 데이터를 정확히 필터링하게 됩니다.
아래 링크에서 유사한 토픽에 대한 논의를 확인하실 수 있습니다:
- “샘플 쿼리 관련 문의드립니다.” - 이 게시물에서는 Index와 관련된 내용 및 성능 최적화에 대한 설명이 포함되어 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.