Mysql
 sql >> база данни >  >> RDS >> Mysql

AM/PM не работи, използвайки между в sql

По-добре е да съхранявате датите си като DATETIME . Тъй като имате тези стойности, това вече показва, че полетата на вашата база данни не са с date тип, като вмъкване на такива низове в date полета няма да доведат до грешка.

Ако това не е възможно да се промени, тогава можете да използвате STR_TO_DATE функция:

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

Но това наистина е по-лошо решение.

И все пак очакването ви да получите само един ред изглежда странно. Със сигурност третият ред отговаря на изискването, тъй като началните/крайните дати са преди/след датата, която проверявате, независимо от часовите части.

Допълнение

В коментарите казвате, че искате да приложите различна логика. Предполагам искате да сравните отделно компонентите за дата и час и двата да отговарят на between състояние. Това наистина трябва да бъде обяснено във въпроса, тъй като в момента не е уточнено.

В такъв случай можете да използвате DATE_FORMAT за да извлечете само частта от времето и повторете условието с това:

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

Тази заявка ще изключи 3 реда от резултата.




  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

  2. Условен външен ключ към множество таблици

  3. MySql.Data в GAC, все още SecurityException

  4. Mysql Max с групиране по заявка

  5. Синтактична грешка в израза MERGE