この質問が長すぎる場合は事前にお詫びしますが、この時点までに行ったすべての手順が含まれていることを確認したいと思います。SQLの日付比較で0の結果が返されるのはなぜですか?
私はSQL Server 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は現在
var recalc = (from re in VSPRRecalcs
where re.VSPRDate.Date == oDate.Value.Date
select re).SingleOrDefault();
:指定された日付は既にこのテーブルに存在する場合日付が真夜中から5時間以内であれば(上記の挿入ステートメントの12〜29の場合のように)私はチェックし、次の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レコードを返します。私はと遊ぶためにテストを容易にするために、クエリを修正して、次のを思い付いた:
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
クエリは真夜中の5時間以内で任意の日付のために、テーブル内の任意の他の日付のために働くがないように(再び上記の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