2017-10-04 3 views
0

アプリケーション(EHRシステム)を使用しており、SSRSレコードの特定の日付範囲のレコードを取得する必要があります。スクリプトでは、日付変数をフォーマットして列に適用します。SQL Server:期間外のレコードを返す

Convert(varchar(10), @begdt, 101) + ' 00:00:00' and 
Convert(varchar(10), @enddt, 101) + ' 23:59:59' 

私は2017年1月1日と2017年1月31日に開始日と終了日を設定した場合、それは2017年2月1日に関連付けられているレコードを引っ張ります。誰もこれで私を助けることができますか?

+1

の世話をします比較のために 'datetime'を文字列に変換しますか? [蹴る悪い習慣:誤った日付/範囲のクエリ - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date- range-queries.aspx) [betweenと悪魔の共通点は何ですか? - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx) – SqlZim

答えて

0

日付を文字列に変換しないでください。 SQL Serverでは、実際の日付順ではなく、アルファベット順で比較することができます。

0

おそらく言語の競合(米国と英国)があり、実際にSQL Serverはその日付を1月2日と見ています。 この投稿は、言語と日付の情報を提供しています(SQL Server Datetime issues. American vs. British?

0

の間で使用し、別のあなたの日付の書式を設定しないでください:

@begdt = '20170101' 
@enddt = '20170131' 

WHERE column1 >= @begdt AND column2 < @enddt 

あるなぜこれがあなたの日時問題

関連する問題