Đây lại là một ví dụ tuyệt vời về việc tại sao bạn nên thực hiện các lĩnh vực ngày/giờ trong MySQL sử dụng ngày, datetime, hoặc các loại trường dấu thời gian và cho phép ứng dụng của bạn xử lý cách định dạng ngày cho đầu ra.
Ngay bây giờ bạn sẽ cần phải làm điều gì đó như:
SELECT * FROM table_name
WHERE username = '[email protected]'
AND STR_TO_DATE(date_time, '%a, %e %b %Y %H:%i:%s') >= STR_TO_DATE('Thu, 11 Jul 2013 00:00:00', '%a, %e %b %Y %H:%i:%s');
Truy vấn này sẽ không thể sử dụng bất kỳ chỉ số mà bạn có trong lĩnh vực date_time
của bạn, do đó truy vấn sẽ rất hiệu quả. Nó sẽ cần phải thực hiện quét toàn bộ bảng, chuyển đổi giá trị của mỗi hàng để thực hiện so sánh.
Những gì bạn nên làm là:
SELECT * FROM table_name
WHERE username = '[email protected]'
AND date_time >= STR_TO_DATE('Thu, 11 Jul 2013 00:00:00', '%a, %e %b %Y %H:%i:%s');
đây nếu bạn có lĩnh vực của bạn trong các định dạng datetime MySQL, bạn chỉ cần chuyển đổi các đầu vào cho một định dạng này cho phù hợp. Vì dữ liệu trường của bạn đã ở định dạng này, bạn sẽ có thể sử dụng chỉ mục cho tìm kiếm.
Nguồn
2013-07-15 17:03:58
Vui lòng kiểm tra kiểu dữ liệu của DATE_TIME. Là nó varchar hoặc ngày? –
kiểu dữ liệu là varchar – colourtheweb
Bạn cần phải chuyển đổi Chuỗi thành một ngày, không phải là ngày thành chuỗi. – Barranka