이 질문이 너무 길지만이 지점으로 이동하기 위해 수행 한 모든 단계가 포함되었는지 미리 알고 싶습니다.내 SQL 날짜 비교 결과가 0으로 반환되는 이유
내 SQL 서버 2008 데이터베이스를 다음과 같은 테이블이 :
그것은 다음과 같이 그것의 일부 행이CREATE TABLE [VSPRRecalc](
[VSPRDate] [datetimeoffset](7) NOT NULL,
[CalcType] [int] NOT NULL,
CONSTRAINT [PK_VSPRRecalc] PRIMARY KEY CLUSTERED ([VSPRDate] ASC)
: 나는 확인하고 볼 수 LINQ를 사용하고
INSERT [vsprrecalc](VSPRDate,CalcType) VALUES('2010-12-15 10:17:49.5780000 -05:00','3')
INSERT [vsprrecalc](VSPRDate,CalcType) VALUES('2010-12-16 07:44:03.3750000 -05:00','1')
INSERT [vsprrecalc](VSPRDate,CalcType) VALUES('2010-12-17 07:40:40.1090000 -05:00','1')
INSERT [vsprrecalc](VSPRDate,CalcType) VALUES('2010-12-18 16:29:02.2203744 -05:00','2')
INSERT [vsprrecalc](VSPRDate,CalcType) VALUES('2010-12-20 09:58:50.1250000 -05:00','1')
INSERT [vsprrecalc](VSPRDate,CalcType) VALUES('2010-12-29 19:21:26.8120000 -05:00','1')
을 주어진 날짜가이 테이블에 이미 존재하면 :
현재 recalc
은 n을 반환합니다. (위의 삽입 문에서 12-29 경우와 같이) 자정으로부터 5 시간 이내에있을 때마다. 확인하고 다음 SQL 실행되고 :
exec sp_executesql N'SELECT [t0].[VSPRDate], [t0].[CalcType]
FROM [dbo].[VSPRRecalc] AS [t0]
WHERE
CONVERT(DATE, [t0].[VSPRDate]) = @p0',N'@p0 datetime',@p0='2010-12-29'
어떤 0 레코드를 반환합니다. 나는 놀 테스트 쉽게하기 위해 쿼리를 수정 해낸 다음 그 쿼리가 아니라 자정 5 시간 내에 모든 날짜 (다시 테이블에 다른 날짜를 작동
declare @t as date
set @t = '2010-12-29'
select *,
case when CONVERT(DATE, [VSPRDate]) = @t then 'true' else 'false' end
from VSPRRecalc where
CONVERT(DATE, [VSPRDate]) = @t
을 위의 12-29 참조). where 절없이 위의 쿼리를 실행하면 12-29 행에 'true'가 표시되어 부울이 select
문에서 예상하는 방식을 평가하지만 where
절에 표시되지 않습니다. 왜 그런 일이 일어날까요?
:
는내가 알 수있는 것은 다음과 같은
이상한, 위의'executeql' 문 ** 작품 ** 1 행) ... – rsenna
... 실제로 위의 마지막 문장도 나를 위해 작동하지 않습니다 ('case' 표현식은 2010-12-29 행에'true '를 반환하지만, where 부분을 포함하면 행이 반환되지 않음)! – rsenna
죄송합니다. SQL 문을 실행하면 일부 테스트에서 남겨졌습니다. 나는 거기에 있었음에 틀림없는 것을 반영하기 위해 지금 편집했습니다. '및 VSPRDate = '2010-12-29 19 : 21 : 26.8120000 -05 : 00''을 포함하면 쿼리가 작동합니다. 나는 그 차이가 무엇인지 모른다. – Mykroft