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.