sql >> Database teknologi >  >> RDS >> Mysql

AM/PM virker ikke ved at bruge mellem i sql

Det er bedre at gemme dine datoer som DATETIME . Da du har disse værdier, viser det allerede, at dine databasefelter ikke er af date type, som at indsætte sådanne strenge i date felter ville ikke give en fejl.

Hvis dette ikke er muligt at ændre, kan du bruge 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 er virkelig en ringere løsning.

Alligevel virker din forventning om kun at få én række mærkelig. Den tredje række opfylder bestemt kravet, da start-/forfaldsdatoerne er før/efter den dato, du tjekker, uanset tidsdelene.

Tillæg

I kommentarer siger du, at du vil anvende en anden logik. Jeg gætter du ønsker at sammenligne dato- og tidskomponenterne separat, og begge dele for at overholde between tilstand. Dette bør virkelig forklares i spørgsmålet, da det i øjeblikket ikke er specificeret.

I så fald kan du bruge DATE_FORMAT for kun at udtrække tidsdelen, og gentag betingelsen 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')

Denne forespørgsel vil ekskludere de 3 rækker fra resultatet.




  1. SQLSTATE[23000]:Overtrædelse af integritetsbegrænsning:1048 Kolonnen 'post' kan ikke være null

  2. Hvorfor er det hurtigere at udføre lagrede procedurer end SQL-forespørgsler fra et script?

  3. Henter data fra JDBC-databasen til Jtable

  4. Udfør sp_executeSql for select...into #table, men kan ikke udvælge Temp-tabeldata