2007.06.27

SQLServerの DateTime型に潜むワナ

ハマりました。
事の次第を短絡するとこうです。

SELECT Case When Convert(datetime, '2007-06-27 21:20:01.871') > Convert(datetime, '2007-06-27 21:20:01.869') Then 'True' Else 'False' End

-- 結果 'False' が表示される!!


よく調べると、こうです。

 『datetime型はミリ秒まで保持する。・・・といっても精度は 3.33 ミリ秒 である。』


ということで、こうなのです。

SELECT Case When Convert(datetime, '2007-06-27 21:20:01.871') = Convert(datetime, '2007-06-27 21:20:01.869') Then 'True' Else 'False' End

-- 結果 'True' が表示される!! ヒー


そういや、昔 Oracleでも似たような件でハマったっけか。
お気をつけアレ。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ichikawa