2010-09-06 62 views
57

Tôi muốn so sánh ngày tháng từ cơ sở dữ liệu giữa 2 ngày nhất định. Cột từ cơ sở dữ liệu là DATETIME và tôi chỉ muốn so sánh nó với định dạng ngày, không phải định dạng ngày giờ.So sánh ngày trong MySQL

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' 

tôi nhận được lỗi này khi tôi thực hiện SQL trên:

Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho cú pháp phải để sử dụng gần 'us_reg_date, 120)> =' 2000-07-05 'AND CONVERT (CHAR (10), us_reg_date, 120) < = '2011-' tại dòng 1

Làm cách nào để khắc phục sự cố này?

Trả lời

58

Bạn có thể thử dưới đây truy vấn,

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

Đối với những người đến từ google: loại ngày trong mysql có định dạng yyyy-mm-dd. –

67

Đó là SQL Server syntax để chuyển đổi ngày thành chuỗi. Trong MySQL bạn có thể sử dụng DATE chức năng để giải nén các ngày từ một datetime:

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

Nhưng nếu bạn muốn tận dụng lợi thế của một chỉ mục trên cột us_reg_date bạn có thể muốn thử loại này thay vì:

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

Tôi đánh giá cao việc bạn xem xét lợi dụng chỉ mục. Tôi nghĩ rằng truy vấn không nên có mệnh đề "+ interval 1 day". – Jurgenfd

6

này làm việc cho tôi:

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

Lưu ý chuỗi định dạng '% Y-% m-% d' và định dạng ngày nhập.

5

xin chào các bạn, xin cảm ơn sự giúp đỡ của bạn, tôi đã nhận được câu trả lời.

đây là mã .......

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

đây là những gì nó đã làm việc cho tôi:

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

Xin vui lòng, lưu ý rằng tôi đã phải thay đổi STR_TO_DATE (cột, ' % d /% m /% Y ') từ các giải pháp trước, vì đã mất nhiều thời gian để tải