programing

SQL의 날짜 비교 쿼리

telecom 2023. 4. 15. 08:22
반응형

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가 날짜 유형입니다.

날짜 형식은 기본적으로 yyy-dd-MM 입니다.

지역 문화에 따라 의미가 달라지는 '2013-04-12' 대신 문화 불변형 형식으로 인정받는 '20130412'를 사용한다.

12월th 4일과 비교하려면 '20131204'라고 적어야 합니다.4월th 12일과 비교하려면 '20130412'라고 적어야 합니다.

SQL Server 설명서의 Write International Transact-SQL Statements 문서에서는 문화적으로 불변하는 스테이트먼트를 작성하는 방법에 대해 설명합니다.

다른 API 또는 Transact-SQL 스크립트, 저장 프로시저 및 트리거를 사용하는 응용 프로그램에서는 구분되지 않은 숫자 문자열을 사용해야 합니다.예를 들어 yyymmdd는 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'

날짜 값만 비교할 경우 날짜 값이 아닌 날짜 값으로 변환됩니다.

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')

<=을 사용법, 하다, 하다, 하다로 바꿀 수 요.<오직.

날짜 형식은 yyy-mm-dd 입니다.위의 쿼리는 2013년 4월 12일 이전 레코드를 찾고 있습니다.

날짜 문자열을 '2013-04-30'으로 설정하여 퀵체크를 하는 것이 좋습니다.SQL 오류가 없는 경우 날짜 형식은 yyy-mm-dd로 확인됩니다.

날짜 전후에 "#"을 사용하고 시스템 날짜 형식을 확인하십시오. "YYYMDD O YYY-MM-DD O MM-DD-YYYYY O USING / O \" "

예:

 select id,numbers_from,created_date,amount_numbers,SMS_text 
 from Test_Table
 where 
 created_date <= #2013-04-12#

동일한 형식의 날짜로 변환한 다음 비교할 수 있습니다.③이렇게 해 주세요.

where convert(date, created_date,102) <= convert(date,                                  /*102 is ANSI format*/
                                                    substring('2013-04-12',1,4) + '.' + /*year*/
                                                    substring('2013-04-12',9,2) + '.' + /*month*/
                                                    substring('2013-04-12',6,2)         /*day*/
                                                ,102)

to_char(column_name, 'YYY-MM-DD')를 사용하여 형식을 변경할 수도 있습니다.

아래 쿼리를 사용하여 2013년 11월 기록을 찾을 수 있습니다.

Select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where Month(created_date) = 11 and Year(created_date) = 2013

MS Access에 대한 쿼리의 경우 다음 구문을 사용하여 날짜를 비교할 수 있습니다.

SELECT COUNT(orderNumber) AS Total
FROM Orders
WHERE orderDate >=#2003/04/01#
AND orderDate <=#2003/06/30#;

여기서 output은 2003-04-01 ~2003-06-30 사이의 주문 수입니다.

언급URL : https://stackoverflow.com/questions/19924236/query-comparing-dates-in-sql

반응형