SQL Serverで特定の日付より後のすべての日付を照会するにはどうすればよいですか?


338

私はしようとしています:

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;

A.Date 次のようになります。 2010-03-04 00:00:00.000

ただし、これは機能していません。

誰もがその理由を説明できますか?


17
それを一重引用符で
囲み

2
引用符に加えて、日付のみの文字列リテラルには常に安全で明確な形式を使用することをお勧めします。私が信頼するのはYYYYMMDDだけです。理由については、Davidの回答に対する私のコメントを参照してください...
アーロンバートランド

回答:


486
select *  
from dbo.March2010 A 
where A.Date >= Convert(datetime, '2010-04-01' )

クエリで2010-4-01は、は数式として扱われるため、本質的には

select *  
from dbo.March2010 A 
where A.Date >= 2005; 

2010 minus 4 minus 1 is 2005 これを適切なに変換し、datetime単一引用符を使用すると、この問題が修正されます。)

技術的には、パーサーを使用すると、

select *  
from dbo.March2010 A 
where A.Date >= '2010-04-01'

それはあなたのために変換を行いますが、私の意見ではDateTime、あなたの後に来るメンテナンスプログラマのために明示的に変換するよりも読みにくいです。


37
明示的な変換は必要ありません。また、YYYY-MM-DDの代わりにYYYYMMDDを使用することを強くお勧めします。どうして?さて、でコードを試してくださいSET LANGUAGE FRENCH。:-)その日付では、4月1日ではなく1月4日になります。他の日付では、代わりにエラーが発生する可能性があります。
アーロンバートランド

4
@Aaron Bertrant-私の答えには、「技術的には、パーサーを使用すると<最終コードサンプル>で問題を解決できる可能性があります。変換が不要であることが含まれていました。 date-time。多すぎるデータベースシステムがvarcharフィールドに日付値を格納しますが、形式は正しいです。通常、変換を使用するときは、形式指定子も追加しますが、サンプルを上から実行していましたヘッド
デビッド

1
@AaronBertrand、私は上記の回答と併せてあなたの提案を使わなければなりCONVERT(datetime, '20100401 10:01:01')ませんでした:-2010-04-01 を渡すとSQL Server Management Studioで機能しますが、PHP / MSSQL経由でSQLステートメントを送信するときは機能しません。
クリップ

これは日付であることは明らかなので、変換は必要ありません。
ジャックマシュー

56

日付を文字列で囲んでみてください。

 select * 
 from dbo.March2010 A
 where A.Date >= '2010-04-01';

2
時間を追加すると、正確な結果が得られます:where A.Date> = 2014-01-12 12:28:00
shaijut

16

以下のようにも使えます

SELECT * 
FROM dbo.March2010 A
WHERE CAST(A.Date AS Date) >= '2017-03-22';

SELECT * 
    FROM dbo.March2010 A
    WHERE CAST(A.Date AS Datetime) >= '2017-03-22 06:49:53.840';

2
フィルター述語列を変更することは、まったく良い考えではありません。インデックスの使用をほぼ完全に防ぎます。
pimbrouwers 2017年

3
DateTime start1 = DateTime.Parse(txtDate.Text);

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= start1;

最初にTexBoxをDatetimeに変換し、次にその変数をQueryに使用します。


3

以上をまとめると、正解は次のとおりです。

select * from db where Date >= '20100401'  (Format of date yyyymmdd)

これにより、他の言語システムの問題が回避され、インデックスが使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.