構文の 2 番目の日付参照BETWEEN
は魔法のように「1 日の終わり」と見なされると想定されていますが、これは正しくありません。
つまり、これは予想されていました:
SELECT * FROM ケース
WHERE created_at BETWEEN '2013-05-01'の開始と'2013-05-01 'の終了
しかし、実際に何が起こるかは次のとおりです。
SELECT * FROM ケース
WHERE created_at BETWEEN '2013-05-01 00:00:00+00000 ' AND '2013-05-01 00:00:00+00000 '
これは次と同等になります。
SELECT * FROM ケース WHERE created_at = '2013-05-01 00:00:00+00000 '
BETWEEN
問題は、どちらが範囲内の下限値と上限値の両方を含むかについての認識/期待の 1 つですが、魔法のように日付を「開始」または「終了」にするわけではありません。
BETWEEN
日付範囲でフィルタリングする場合は避ける必要があります。
常に>= AND <
代わりに
SELECT * FROM ケース
WHERE ( created_at >= '20130501' AND created_at < '20130502')
ここでは括弧は省略可能ですが、より複雑なクエリでは重要になる場合があります。