So sánh ngày tháng trong MySQL


95

Tôi muốn so sánh một ngày từ cơ sở dữ liệu nằm 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 tháng, không phải định dạng ngày giờ.

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 gặp lỗi này khi thực thi SQL ở trên:

Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để 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 thế nào vấn đề này có thể được khắc phục?

Câu trả lời:


95

Bạn có thể thử truy vấn bên dưới,

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

39
Đối với những người đến từ google: nhập ngày trong mysql có định dạng yyyy-mm-dd.
Błażej Michalik

89

Đó là cú pháp SQL Server để chuyển đổi một ngày thành một chuỗi. Trong MySQL, bạn có thể sử dụng hàm DATE để trích xuất ngày 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_datebạn có thể muốn thử điều này thay thế:

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 cân nhắc tận dụng chỉ số này. Tôi nghĩ rằng truy vấn không nên có mệnh đề "+ khoảng thời gian 1 ngày".
Jurgenfd

10

Điều này phù hợp với 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 của ngày nhập.


6

Tôi đã 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')

2

đâ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 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ì quá trình tải sẽ mất nhiều thời gian

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.