@Mit_tt

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SQLServerのWHERE句でdatetime型の列とdate型の変数を比較してもよいか

解決したいこと

SQLServerのWHERE句でdatetime型の列とdate型の変数を比較しても問題ありませんか?

変数の型をdate型にしたのは特に理由はありません。
あとになり、datetime型の列とdate型の変数を比較していることに気づきました。

AIに聞いてみると暗黙的に型変換が行われるため問題ないと返答が来ました。
(date型の時刻を00:00:00として補完する)

こちらも時刻は「00:00:00」に固定したいため現状のままのSQLを使用しています。
また、実際の出力結果を確認しても問題なく結果が出ています。

date型の変数をdatetime型の変数に修正した方がよいのでしょうか。

よろしくお願いいたします。

該当するソースコード

DECLARE @BeforeThreeMonths date;
SET @BeforeThreeMonths = DATEADD(MONTH, -3, GETDATE())

SELECT *
  FROM TestDB
 WHERE @BeforeThreeMonths < TestDate
0 likes

2Answer

パラメータをdate型にするか、datetime型にするか、該当SQLを呼び出す側の業務によるものと思います。もし、年月日しか渡してくれないなら、date型はただしいです。時分秒まで渡してくれるなら、datetime型がただしいです。年月日しか許さない業務なのに、datetimeにすると、誰か無駄に時分秒を渡す試みの可能性がでてきます。

インタフェースのタイプは、関数カプセル内のプログラムの都合ではなく、利用側は、それを誤解なし見やすいかどうかと思います。

0Like

比較すること自体は特に問題ありませんが、datetimeとdateを比較する際にはタイムゾーンについて気にした方がいいと思います。
SQLServerのGETDATE()はSQLServerが動いているコンピュータの時計の時刻が取得されますので、例えばその時計がUTCだと日本時間(JST)とは9時間のずれが発生します。
「ローカルのPCで動かしている間は問題なく動くのに、サーバ上で動かしたら何故か特定の場合だけ不具合が発生する」みたいなことになりかねませんから、気をつけておいた方がいいでしょう。

0Like

Your answer might help someone💌