1. ホーム
  2. sql

[解決済み] SQL "間" 含まない

2022-03-02 15:30:09

質問

このようなクエリーがあります。

SELECT * FROM Cases WHERE created_at BETWEEN '2013-05-01' AND '2013-05-01'

しかし、これでは1日にデータがあるにもかかわらず、結果が出ません。

created_at のように見えます。 2013-05-01 22:25:19 時間との関係があるのでは?どうすれば解決するのでしょうか?

大きな日付範囲であれば問題なく動作しますが、単一の日付でも(包括的に)動作するはずです。

どのように解決するのですか?

それは を含む。 datetimesとdateを比較していることになります。 2番目の日付は午前0時と解釈されます 一日の始まり .

これを解決する一つの方法として

SELECT *
FROM Cases
WHERE cast(created_at as date) BETWEEN '2013-05-01' AND '2013-05-01'

この問題を解決するもう一つの方法は、明示的な二項比較を行うことです。

SELECT *
FROM Cases
WHERE created_at >= '2013-05-01' AND created_at < '2013-05-02'

Aaron Bertrandが日付に関する長いブログエントリーを書いています( こちら ) で、この件やその他の日付の問題について論じています。