2014-02-22 2 views
7

현재 날짜 또는 미래와 같은 날짜로 모든 레코드를 가져와야하는 저장 프로 시저가 있습니다. 날짜는 targetDate 열에 저장되고 datetime으로 서식이 지정됩니다. 절은 다음과 같다 WHERE 내 대응 다음 targetDate 다음과 같이 모든 날짜가 0으로 설정된 시간 즉, 저장으로 현재 날짜와 동일한 경우 내 저장 프로 시저가 잘 작동 일반적으로SQL 서버 : GETDATE()와 datetime day를 비교하십시오.

WHERE A.targetDate >= GETDATE() 

, 내 유일한 문제는 :

2014-02-22 00:00:00.000 

은 어떻게 변경해야 할 내 WHERE 절은 날짜 만 생각하지만 난 시간이 이미 지난 경우에도 현재 날짜와 어떤 기록을 얻을 수 있도록 함께 저장 시간을 무시하도록?

Tim과 관련하여 많은 감사를드립니다.

+0

에 어떤 인덱스를 활용해야하는 SQL 서버의 버전 당신 있다? –

+0

SQL Server 버전 2008 – user2571510

답변

20

변경하려면 :

SELECT DATEADD(dd,0,DATEDIFF(dd,0,GETDATE())) 

이 당신의 마지막 줄 수 있어야

WHERE A.targetDate >= cast(GETDATE() as date) 

편집 - 때문에를 또한 targetdate에는 다음과 같이 시간, 예, 형식이 모두 포함됩니다.

WHERE cast(A.targetDate as date) >= cast(GETDATE() as date) 

편집 - 주어진 의견을 다시 : 성능을 시도 할 수 있습니다 :

WHERE a.targetdate >= cast(cast(getdate() as date) as datetime) 

마지막으로 수정하면 같은 결과를 제공하고 targetdate

+0

고마워요. - 나에게 도움이되지 않습니다. targetDate도 형식화해야합니까? – user2571510

+1

날짜 입력란이 아닐 경우 시간 소인입니까 아니면 날짜 필드입니까? –

+0

날짜/시간 필드입니다. 그러나 입력은 항상 위의 예제와 같이 시간에 대해 0을 추가하는 이유 인 날짜입니다. – user2571510

2

다음은 당신에게 어떤 시간에 현재 날짜 주어야한다 :

WHERE A.targetDate >= DATEADD(dd,0, ATEDIFF(dd,0,GETDATE())) 
+1

두 번째'SELECT '를 사용하면 구문 오류가 발생합니다. 서브 쿼리가 필요 없으므로'SELECT'를 제거하십시오. 'DATEDIFF'에'ATEDIFF'를 바꾼다) – MatBailie

+0

고맙습니다. 그것은 위의 줄에서 복사/붙여 넣기 실수였습니다. 나는 그것을 고쳤다. – Preli