web-dev-qa-db-ja.com

SQL Serverで特定の日付よりも大きいすべての日付を照会する方法を教えてください。

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

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

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

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

誰もがその理由について参照を提供できますか?

268
Eric Francis
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に明示的に変換することより読みにくいです。

390
David

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

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

以下のようにも使えます

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';
9
dush88c
DateTime start1 = DateTime.Parse(txtDate.Text);

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

まずTexBoxをDatetimeに変換し、次にその変数をクエリに使用します

3
Suresh Parmar

まとめると、正解は.....です.

日付> = '20100401'(日付の形式yyyymmdd)から*を選択します

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

0
Dan