มันได้รับการสันนิษฐานว่าการอ้างอิงวันที่สองในBETWEEN
ไวยากรณ์ถือว่าน่าอัศจรรย์เป็น "ตอนท้ายของวัน" แต่นี้ไม่เป็นความจริง
เช่นนี้คาดว่า:
เลือก * จากกรณี
WHERE created_at ระหว่างจุดเริ่มต้นของ '2013-05-01' และตอนท้ายของ '2013-05-01'
แต่สิ่งที่เกิดขึ้นจริงคือ:
เลือก * จากกรณี
WHERE created_at BETWEEN '2013-05-01 00: 00: 00 + 00000 ' AND '2013-05-01 00: 00: 00 + 00000 '
ซึ่งจะเทียบเท่ากับ:
เลือก * จากกรณีที่สร้างขึ้น _at = '2013-05-01 00: 00: 00 + 00000 '
ปัญหาที่เกิดขึ้นเป็นหนึ่งในการรับรู้ / ความคาดหวังเกี่ยวกับการBETWEEN
ที่ไม่ได้รวมทั้งค่าที่ต่ำกว่าและค่าตอนบนในช่วง แต่ไม่ได้อย่างน่าอัศจรรย์ทำให้วันส่วน "จุดเริ่มต้นของ" หรือ "จุดสิ้นสุดของ"
BETWEEN
ควรหลีกเลี่ยงเมื่อกรองตามช่วงวันที่
ใช้>= AND <
แทนเสมอ
เลือก * จากกรณี
WHERE (created_at > = '20130501' และ created_at < '20130502')
วงเล็บเป็นทางเลือกที่นี่ แต่อาจมีความสำคัญในการสืบค้นที่ซับซ้อนมากขึ้น