[sql] SQL에서 날짜를 비교하는 쿼리
11 월에 발생한 모든 날짜가있는 테이블이 있습니다. 이 쿼리를 작성했습니다.
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= '2013-04-12'
이 쿼리는 ‘2013-04-12’날짜 (12 월) 이전 에 발생 했으므로 11 월 (11 월)에 발생한 모든 것을 반환해야합니다.
그러나 그것은 단지보다 적은 일에 일어난 가능한 날짜를 반환하는 것 04 (2013- 04 -12)
하루 부분 만 비교하는 것일까 요? 전체 날짜가 아니라 고요?
이 문제를 해결하는 방법?
Created_date는 date 유형입니다.
날짜 형식은 기본적으로 yyyy-dd-MM입니다.
답변
지역 문화에 따라 의미가 달라지는 ‘2013-04-12’대신 문화 불변 형식으로 인식되는 ‘20130412’를 사용합니다.
년 12 월 4 비교하려면 일 , 당신은 ‘20131204’를 작성해야합니다. 당신이 4 월 12 비교할 경우 일 , 당신은 ‘20130412’를 작성해야합니다.
이 기사를 쓰기 국제 거래-SQL 문 SQL 서버의 문서에서 문화의 불변 문을 작성하는 방법을 설명합니다 :
다른 API 또는 Transact-SQL 스크립트, 저장 프로 시저 및 트리거를 사용하는 응용 프로그램은 구분되지 않은 숫자 문자열을 사용해야합니다. 예를 들어, yyyymmdd는 19980924입니다.
편집하다
ADO를 사용하고 있으므로 가장 좋은 방법은 쿼리를 매개 변수화하고 날짜 값을 날짜 매개 변수로 전달하는 것입니다. 이렇게하면 형식 문제를 완전히 방지하고 매개 변수가있는 쿼리의 성능 이점도 얻을 수 있습니다.
최신 정보
리터럴에서 ISO 8601 형식을 사용하려면 모든 요소를 지정해야합니다. datetime 문서의 ISO 8601 섹션에서 인용하려면
ISO 8601 형식을 사용하려면 형식에 각 요소를 지정해야합니다. 여기에는 형식에 표시된 T, 콜론 (:) 및 마침표 (.)도 포함됩니다.
… 두 번째 구성 요소의 비율은 선택 사항입니다. 시간 구성 요소는 24 시간 형식으로 지정됩니다.
답변
이렇게 해봐
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= '2013-12-04'
답변
date vale로만 비교하는 경우 datetime 이 아닌 date로 변환 하면 작동합니다.
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= convert(date,'2013-04-12',102)
이 변환은 GetDate () 함수를 사용하는 동안에도 적용됩니다.
답변
당신은 입력 <=
하고 주어진 날짜도 잡을 것입니다. <
로만 교체 할 수 있습니다 .
답변
아래 쿼리로 시도하십시오
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
convert(datetime, convert(varchar(10), created_date, 102)) <= convert(datetime,'2013-04-12')
답변
날짜 형식은 yyyy-mm-dd입니다. 따라서 위 쿼리는 2013 년 4 월 12 일보다 오래된 레코드를 찾습니다.
날짜 문자열을 ‘2013-04-30’으로 설정하여 빠른 확인을 제안하십시오 .SQL 오류가 없으면 날짜 형식이 yyyy-mm-dd로 확인됩니다.
답변
날짜 전후에 “#”을 사용하고 시스템 날짜 형식을 확인하십시오. 아마도 “YYYYMMDD O YYYY-MM-DD O MM-DD-YYYY O USING ‘/ O \'”
전의:
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= #2013-04-12#