มีวิธีในคำสั่ง MySQL ในการสั่งซื้อบันทึก (ผ่านการประทับวันที่) โดย> = NOW () -1 ดังนั้นจึงเลือกบันทึกทั้งหมดตั้งแต่วันก่อนวันนี้ถึงอนาคต
มีวิธีในคำสั่ง MySQL ในการสั่งซื้อบันทึก (ผ่านการประทับวันที่) โดย> = NOW () -1 ดังนั้นจึงเลือกบันทึกทั้งหมดตั้งแต่วันก่อนวันนี้ถึงอนาคต
คำตอบ:
เมื่อพิจารณาจากเอกสารสำหรับฟังก์ชั่นวันที่ / เวลาคุณควรจะทำสิ่งต่อไปนี้ได้
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
โปรดทราบว่าผลลัพธ์อาจแตกต่างจากที่คุณคาดไว้เล็กน้อย
NOW()
ส่งคืน a DATETIME
.
และทำงานเป็นชื่อเช่นINTERVAL
INTERVAL 1 DAY = 24 hours
ดังนั้นหากสคริปต์ของคุณต้องการเรียกใช้ cron 03:00
ก็จะพลาดไฟล์first three hours of records from the 'oldest' day
.
CURDATE() - INTERVAL 1 DAY
ที่จะได้รับการใช้งานตลอดทั้งวัน สิ่งนี้จะย้อนกลับไปที่จุดเริ่มต้นของวันก่อนหน้าโดยไม่คำนึงว่าสคริปต์จะทำงานเมื่อใด
เกือบจะถึงแล้ว: มัน NOW() - INTERVAL 1 DAY
ไม่เห็นคำตอบที่ถูกต้องโดยใช้DATE_ADD
หรือDATE_SUB
:
ลบ 1 วันจาก NOW()
...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)
เพิ่ม 1 วันจาก NOW()
...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)
แน่ใจว่าคุณสามารถ:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
DATE_ADD
-1 day
เมื่อช่องค้นหามีการประทับเวลาและคุณต้องการค้นหาบันทึกจาก 0 ชั่วโมงเมื่อวานนี้และ 0 ชั่วโมงในวันนี้ให้ใช้การก่อสร้าง
MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))
แทน
now() - interval 1 day