SQL Server에서 특정 날짜보다 큰 모든 날짜를 어떻게 쿼리합니까?


338

노력하고있어:

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;

A.Date 다음과 같습니다 2010-03-04 00:00:00.000

그러나 이것은 작동하지 않습니다.

누구나 이유에 대한 참조를 제공 할 수 있습니까?


17
주위에 작은 따옴표를 넣어
Kevin DiTraglia

2
따옴표 외에도 항상 날짜 전용 문자열 리터럴에 안전하고 명확한 형식을 사용하는 것이 좋습니다. 내가 신뢰하는 유일한 것은 YYYYMMDD입니다. ... 이유는 다윗의 대답에 내 의견을 참조하십시오
아론 버트 랜드에게

답변:


486
select *  
from dbo.March2010 A 
where A.Date >= Convert(datetime, '2010-04-01' )

쿼리에서 2010-4-01수학 표현식으로 취급되므로 본질적으로 읽습니다.

select *  
from dbo.March2010 A 
where A.Date >= 2005; 

( 2010 minus 4 minus 1 is 2005 적절한로 변환하고 datetime작은 따옴표를 사용하면이 문제가 해결됩니다.)

기술적으로 파서는

select *  
from dbo.March2010 A 
where A.Date >= '2010-04-01'

그것은 당신을 위해 변환을 할 것이지만, 내 의견으로는 당신 DateTime을 따르는 유지 보수 프로그래머를 위해 명시 적으로 변환하는 것보다 읽기 쉽지 않습니다 .


37
명시 적 변환은 필요하지 않습니다. 또한 YYYY-MM-DD 대신 YYYYMMDD를 사용하는 것이 좋습니다. 왜? 글쎄,로 코드를 사용해보십시오 SET LANGUAGE FRENCH. :-) 해당 날짜의 경우 4 월 1 일 대신 1 월 4 일이됩니다. 다른 날짜의 경우 오류가 발생할 수 있습니다.
Aaron Bertrand

4
@Aaron Bertrant-내 대답에는 "기술적으로 파서는 <최종 코드 샘플>을 사용하지 못하게 할 수 있습니다. 시작하기 전에 변환이 필요하지 않다"고 대답했습니다. 날짜-시간 : 너무 많은 데이터베이스 시스템이 날짜 값을 varchar 필드에 저장하지만 형식에 대한 것이 맞습니다. 일반적으로 변환을 사용할 때 형식 지정자도 추가하지만 샘플을 맨 처음부터 수행했습니다. 머리.
데이비드

1
@AaronBertrand, 위의 답변과 관련하여 귀하의 제안을 사용해야했습니다 CONVERT(datetime, '20100401 10:01:01').- 2010-04-01 통과는 SQL Server Management Studio에서 작동하지만 PHP / MSSQL을 통해 SQL 문을 보낼 때는 작동하지 않습니다.
클립

나는 이것이 날짜라는 것이 분명하다고 생각하므로 변환이 필요하지 않습니다.
Jacques Mathieu

56

날짜를 문자열로 묶어보십시오.

 select * 
 from dbo.March2010 A
 where A.Date >= '2010-04-01';

2
시간을 추가하면 정확한 결과를 제공합니다 : 어디 A.Date> = 2014년 1월 12일 12시 28분 0초
shaijut

16

아래와 같이 사용할 수 있습니다

SELECT * 
FROM dbo.March2010 A
WHERE CAST(A.Date AS Date) >= '2017-03-22';

SELECT * 
    FROM dbo.March2010 A
    WHERE CAST(A.Date AS Datetime) >= '2017-03-22 06:49:53.840';

2
필터 조건 자 열을 수정하는 것은 좋은 생각이 아닙니다. 인덱스 사용을 거의 완전히 방지합니다.
pimbrouwers 17

3
DateTime start1 = DateTime.Parse(txtDate.Text);

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= start1;

먼저 TexBox를 Datetime으로 변환 한 다음 해당 변수를 쿼리에 사용하십시오.


3

요약하면 정답은 다음과 같습니다.

select * from db where Date >= '20100401'  (Format of date yyyymmdd)

이것은 다른 언어 시스템에 대한 문제를 피하고 색인을 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.