เปรียบเทียบวันที่ใน MySQL


95

ฉันต้องการเปรียบเทียบวันที่จากฐานข้อมูลที่อยู่ระหว่าง 2 วันที่กำหนด คอลัมน์จากฐานข้อมูลคือ DATETIME และฉันต้องการเปรียบเทียบกับรูปแบบวันที่เท่านั้นไม่ใช่รูปแบบวันที่และเวลา

SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10'

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันดำเนินการ SQL ด้านบน:

คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่สอดคล้องกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณสำหรับไวยากรณ์ที่ถูกต้องที่จะใช้ใกล้ 'us_reg_date, 120)> =' 2000-07-05 'และแปลง (CHAR (10), us_reg_date, 120) <=' 2011- 'ที่ บรรทัดที่ 1

ปัญหานี้จะแก้ไขได้อย่างไร?

คำตอบ:


95

คุณสามารถลองค้นหาด้านล่าง

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)

39
สำหรับผู้ที่เดินทางมาจาก google: ประเภทวันที่ใน mysql จะอยู่ในรูปแบบปปปป - มม
Błażej Michalik

89

นั่นคือไวยากรณ์ของ SQL Serverสำหรับการแปลงวันที่เป็นสตริง ใน MySQL คุณสามารถใช้ฟังก์ชันDATEเพื่อแยกวันที่จากวันที่และเวลา:

SELECT *
FROM players
WHERE DATE(us_reg_date) BETWEEN '2000-07-05' AND '2011-11-10'

แต่ถ้าคุณต้องการใช้ประโยชน์จากดัชนีในคอลัมน์us_reg_dateคุณอาจต้องการลองสิ่งนี้แทน:

SELECT *
FROM players
WHERE us_reg_date >= '2000-07-05'
  AND us_reg_date < '2011-11-10' + interval 1 day

1
ขอขอบคุณที่พิจารณาใช้ประโยชน์จากดัชนี ฉันคิดว่าข้อความค้นหาไม่ควรมีอนุประโยค "+ interval 1 day"
Jurgenfd

10

สิ่งนี้ใช้ได้กับฉัน:

select date_format(date(starttime),'%Y-%m-%d') from data
where date(starttime) >= date '2012-11-02';

สังเกตสตริงรูปแบบ '% Y-% m-% d' และรูปแบบของวันที่ป้อนข้อมูล


6

ฉันได้คำตอบแล้ว

นี่คือรหัส:

SELECT * FROM table
WHERE STR_TO_DATE(column, '%d/%m/%Y')
  BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y')
    AND STR_TO_DATE('07/10/15', '%d/%m/%Y')

2

นี่คือสิ่งที่ได้ผลสำหรับฉัน:

select * from table
where column
BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y')
 AND STR_TO_DATE('07/10/15', '%d/%m/%Y')

โปรดทราบว่าฉันต้องเปลี่ยน STR_TO_DATE (คอลัมน์ '% d /% m /% Y') จากโซลูชันก่อนหน้าเนื่องจากต้องใช้เวลาโหลดนาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.