Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

AM / PM không hoạt động bằng cách sử dụng giữa trong sql

Tốt hơn bạn nên lưu trữ ngày của mình dưới dạng DATETIME . Khi bạn có những giá trị này, nó đã cho thấy các trường cơ sở dữ liệu của bạn không thuộc date nhập, như chèn các chuỗi như vậy vào date các trường sẽ không tạo ra lỗi.

Nếu không thể thay đổi điều này, thì bạn có thể sử dụng STR_TO_DATE chức năng:

SELECT * 
FROM `task` 
WHERE t_status !=3 
AND   STR_TO_DATE('2018-01-19 03:56 PM', '%Y-%m-%d %h:%i %p') BETWEEN
        STR_TO_DATE(t_started_on, '%Y-%m-%d %h:%i %p') AND 
        STR_TO_DATE(t_due_on, '%Y-%m-%d %h:%i %p')

Nhưng đó thực sự là một giải pháp kém hơn.

Tuy nhiên, kỳ vọng của bạn chỉ nhận được một hàng có vẻ kỳ lạ. Chắc chắn hàng thứ ba đáp ứng yêu cầu, vì ngày bắt đầu / ngày đến hạn trước / sau ngày bạn đang kiểm tra, bất kể phần thời gian.

Phụ lục

Trong các nhận xét, bạn đang nói rằng bạn muốn áp dụng một logic khác. Tôi đang đoán bạn muốn so sánh riêng các thành phần ngày và giờ và cả hai để tuân thủ between tình trạng. Điều này thực sự nên được giải thích trong câu hỏi, vì hiện tại nó chưa được nêu rõ.

Trong trường hợp đó, bạn có thể sử dụng DATE_FORMAT chỉ trích xuất phần thời gian và lặp lại điều kiện với điều đó:

SELECT *,
       STR_TO_DATE(t_started_on, '%Y-%m-%d %h:%i %p'),
       STR_TO_DATE(t_due_on, '%Y-%m-%d %h:%i %p'),
       STR_TO_DATE('2018-01-19 03:56 PM', '%Y-%m-%d %h:%i %p')
FROM `task` 
WHERE t_status !=3 
AND   STR_TO_DATE('2018-01-19 03:56 PM', '%Y-%m-%d %h:%i %p') BETWEEN
        STR_TO_DATE(t_started_on, '%Y-%m-%d %h:%i %p') AND 
        STR_TO_DATE(t_due_on, '%Y-%m-%d %h:%i %p')
AND   DATE_FORMAT(STR_TO_DATE('2018-01-19 03:56 PM', '%Y-%m-%d %h:%i %p'), '%h:%i') BETWEEN
        DATE_FORMAT(STR_TO_DATE(t_started_on, '%Y-%m-%d %h:%i %p'), '%h:%i') AND 
        DATE_FORMAT(STR_TO_DATE(t_due_on, '%Y-%m-%d %h:%i %p'), '%h:%i')

Truy vấn này sẽ loại trừ hàng 3 khỏi kết quả.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql (gần như) hoàn thành kiểm toán

  2. Gặp phải lỗi nghiêm trọng trong khi thực thi lệnh với mySQL INSERT

  3. Visual Studio 2017 không hiển thị MySQL trong danh sách kết nối

  4. Quyền truy cập mysqldbcompare bị từ chối nhưng lệnh mysql hoạt động

  5. Làm cách nào để truy cập mysql bên ngoài cụm kubernetes của tôi?