Nó đã được giả định rằng tham chiếu ngày thứ hai trong BETWEEN
cú pháp được coi là kỳ diệu là "cuối ngày" nhưng điều này là không đúng sự thật .
tức là điều này đã được mong đợi:
CHỌN * TỪ trường hợp
WHERE created_at GIỮA bắt đầu '2013-05-01' VÀ kết thúc '2013-05-01'
Nhưng những gì thực sự xảy ra là thế này:
CHỌN * TỪ trường hợp
WHERE created_at GIỮA '2013-05-01 00: 00: 00 + 00000 ' VÀ '2013-05-01 00: 00: 00 + 00000 '
Mà trở thành tương đương với:
CHỌN * TỪ các trường hợp WHERE created_at = '2013-05-01 00: 00: 00 + 00000 '
Vấn đề là một trong những nhận thức / kỳ vọng về BETWEEN
mà không bao gồm cả giá trị thấp hơn và các giá trị trên trong phạm vi, nhưng không kỳ diệu làm cho một ngày "bắt đầu" hoặc "kết thúc".
BETWEEN
nên tránh khi lọc theo phạm vi ngày.
Luôn luôn sử dụng >= AND <
thay thế
CHỌN * TỪ trường hợp
WHERE (created_at > = '20130501' VÀ created_at < '20130502')
dấu ngoặc đơn là tùy chọn ở đây nhưng có thể quan trọng trong các truy vấn phức tạp hơn.