私はしようとしています:
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;
A.Date
は次のようになります。2010-03-04 00:00:00.000
しかし、これは機能していません。
誰もがその理由について参照を提供できますか?
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
に明示的に変換することより読みにくいです。
日付を文字列で囲んでみてください。
select *
from dbo.March2010 A
where A.Date >= '2010-04-01';
以下のようにも使えます
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';
DateTime start1 = DateTime.Parse(txtDate.Text);
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= start1;
まずTexBoxをDatetimeに変換し、次にその変数をクエリに使用します
まとめると、正解は.....です.
日付> = '20100401'(日付の形式yyyymmdd)から*を選択します
これにより、他の言語システムの問題が回避され、インデックスが使用されます