Bandingkan tanggal di MySQL

95

Saya ingin membandingkan tanggal dari database yang berada di antara 2 tanggal tertentu. Kolom dari database adalah DATETIME, dan saya ingin membandingkannya hanya dengan format tanggal, bukan format tanggal waktu.

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'

Saya mendapatkan kesalahan ini ketika saya menjalankan SQL di atas:

Ada kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat 'us_reg_date, 120)> =' 2000-07-05 'AND CONVERT (CHAR (10), us_reg_date, 120) <=' 2011- 'di baris 1

Bagaimana masalah ini bisa diperbaiki?

NVG
sumber

Jawaban:

95

Anda dapat mencoba kueri di bawah ini,

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)
Nik
sumber
39
Untuk orang yang datang dari google: tipe tanggal di mysql datang dalam format tttt-bb-hh.
Błażej Michalik
89

Itu adalah sintaks SQL Server untuk mengubah tanggal menjadi string. Di MySQL Anda dapat menggunakan fungsi DATE untuk mengekstrak tanggal dari datetime:

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

Tetapi jika Anda ingin memanfaatkan indeks pada kolom, us_reg_dateAnda mungkin ingin mencoba ini sebagai gantinya:

SELECT *
FROM players
WHERE us_reg_date >= '2000-07-05'
  AND us_reg_date < '2011-11-10' + interval 1 day
Mark Byers
sumber
1
Saya menghargai pertimbangan Anda untuk memanfaatkan indeks. Saya pikir kueri seharusnya tidak memiliki klausa "+ interval 1 hari".
Jurgenfd
10

Ini bekerja untuk saya:

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

Perhatikan format string '% Y-% m-% d' dan format tanggal input.

Rahatur
sumber
6

Saya mendapat jawabannya.

Ini kodenya:

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')
Gurjeet Singh
sumber
2

inilah yang berhasil untuk saya:

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')

Harap perhatikan bahwa saya harus mengubah STR_TO_DATE (kolom, '% d /% m /% Y') dari solusi sebelumnya, karena butuh waktu lama untuk memuat

Iria
sumber