3

このコードを SQL-Server 2008 で実行すると、

select case when '6/1/2012' < '6/1/2012' then 1 else 0 end

私は0を取得します。

そして、私が走ると、

select case when '6/1/2012 0:00:00.000' < '6/1/2012' then 1 else 0 end

私も0です。

しかし、私が実行した場合

select case when '6/1/2012' < '6/1/2012 0:00:00.000' then 1 else 0 end

1を取得します。

どうしてこれなの?

4

2 に答える 2

12

私の推測は:

  1. 2つの文字列を比較しています(クエリには、日付として比較されることになっていることを示すものはありません)。
  2. 1つの余分な文字を除いて、2つの文字列が等しい場合、長い文字列は「大きい」です。

データベースが日付を自動的に検出することを期待しているかもしれませんが、それは日付である場合にデータベースに与えるすべての文字列を解析することを含み、パフォーマンスを低下させ、混乱させる可能性もあります(何かが日付に変換され、あなたが意味しなかった場合)それがするために)。

于 2012-07-17T21:52:54.980 に答える
6

datetimeそれらを値として比較するようにキャストする必要がありdatetimeます。これは次を返します0

select case when cast('6/1/2012' as datetime) < cast('6/1/2012 0:00:00.000' as datetime) then 1 else 0 end
于 2012-07-17T21:54:02.900 に答える