2010-12-05 12 views
1

SQLスクリプトで2つの日付が等しいかどうかをチェックする方法は?SQL Serverで日付を比較

フロントエンドから渡された値が「2010-12-04 22時14分49秒」であり、テーブルの日付は「2010-12-04 22:14:49.253」

私にはありませんミリ秒を気にしてください。私はこの

DATEDIFF(SS,'2010-12-04 22:14:49','2010-12-04 22:14:49.253') = 0 

を試してみましたが、DATEDIFF関数は オーバーフローの結果、次のエラー

を得ました。 2つの日付/時刻インスタンスを分離する日付部分 の数は です。正確ではない日付部分の でdatediffを使用してみてください。

+1

サンプルでこのエラーは発生しません。 –

答えて

2

私のSQL Server(2008 R2)上でT-SQLコードのスニペットがうまく動作します....

はあなたが何らかの形であなたの日付のタイプミス(例えば1010-12-04......)を導入していないよろしいですので、2つの日付の間の距離は本当に本当に大きいでしょうか?

そして、それらの間の秒数でし実際にオーバーフローしてもSQL Serverの大規模な数値範囲 - そしてそれは、エラーメッセージが...言っているまさにそれだ

+0

ありがとうございました。タイプミスがありました。ユーザーは、より長いギャップのある日付を検索しようとします。その場合、どうすればこのエラーを防ぐことができますか? – dotnetrocks

+0

@Dotnetrocks:おそらく、あなたはDATEDIFFを確認する必要があります。 DAY first - 差が1日未満の場合は、SECONDSで確認できます。それとも、例外が発生した場合、日付は明らかにかなり離れています。 –

2

あなたはdatetime列に対してWHERE句でこれを使用していますか?

ので、ちょうど

DECLARE @d DATETIME = '2010-12-04 22:14:49.000' 

SELECT .... 
WHERE YourCol >= @d AND YourCol < DATEADD(SECOND,1,@d) 

を使用している場合はこれがとにかく多くの検索引数可能で効率的になります。

+0

には、日付から秒を削除する手段があります。それから私は1つの比較で1つを行うことができます – dotnetrocks

+1

おそらく。列に関数を適用して秒を削除すると、インデックスを使用してこのクエリを満たすことができないことが保証され、テーブル全体をスキャンします。書かれた私の照会は、レンジシークで満足することができます。 –

+0

@dotnetrocks SET @d = DATEADD(MS、-DATEPART(MS、@d)、@d)でパラメータをミリ秒単位で削除することができます。 –

0

はこの日付から

where convert (varchar(10), @date1, 108) + ' ' + CONVERT(varchar(5), @date1, 108) = convert (varchar(10), @date2, 108) + ' ' + CONVERT(varchar(5), @date2, 108) 
0

キャストを秒を削除し、以下の例のように日時の値の各:

declare @stuff as datetime 
set @stuff = getdate() 
select @stuff 
SELECT CONVERT(VARCHAR(26), @stuff, 120) 

出力=

2010-12-05 16:17:49.720 

2010-12-05 16:17:49 

タイプ120への変換にはミリ秒は含まれません。

他のタイプのコンバージョンについては、LINKに従ってください。