sql >> Databasteknik >  >> RDS >> Mysql

AM/PM fungerar inte med mellan i sql

Det är bättre att lagra dina datum som DATETIME . Eftersom du har dessa värden visar det redan att dina databasfält inte är av date typ, som att infoga sådana strängar i date fält skulle inte ge ett fel.

Om detta inte är möjligt att ändra kan du använda STR_TO_DATE funktion:

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

Men det är verkligen en sämre lösning.

Ändå verkar din förväntan på att bara få en rad märklig. Förvisso uppfyller den tredje raden kravet, eftersom start-/förfallodatum är före/efter det datum du kontrollerar, oavsett tidsdelarna.

Tillägg

I kommentarerna säger du att du vill tillämpa en annan logik. Jag gissar du vill jämföra datum- och tidskomponenterna separat, och båda för att följa between skick. Detta borde verkligen förklaras i frågan, eftersom det för närvarande inte är specificerat.

I så fall kan du använda DATE_FORMAT för att bara extrahera tidsdelen, och upprepa villkoret med det:

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

Den här frågan kommer att utesluta raden 3 från resultatet.




  1. Får Kan inte ansluta till lokal MySQL-server via socket '/var/run/mysqld/mysqld.sock'-fel när du ställer in mysql-databas för Ruby on Rails-appen

  2. Rails:Postgres tillstånd nekad att skapa databas på rake db:create:all

  3. Node.js kan inte autentisera till MySQL 8.0

  4. mysql:hitta rader med upprepade värden plus villkor