sql >> Database >  >> RDS >> Mysql

AM/PM werkt niet met tussen in sql

U kunt uw datums beter opslaan als DATETIME . Omdat je deze waarden hebt, laat het al zien dat je databasevelden niet van de date zijn type, zoals het invoegen van dergelijke strings in date velden zouden geen fout opleveren.

Als dit niet kan worden gewijzigd, kunt u de STR_TO_DATE . gebruiken functie:

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

Maar dat is echt een inferieure oplossing.

Toch lijkt je verwachting om maar één rij te krijgen vreemd. De derde rij voldoet zeker aan de vereiste, aangezien de start-/einddatums vóór/na de datum zijn die u controleert, ongeacht de tijdsdelen.

Aanvulling

In opmerkingen zegt u dat u een andere logica wilt toepassen. Ik denk het u de datum- en tijdcomponenten afzonderlijk wilt vergelijken, en beide om te voldoen aan de between voorwaarde. Dit moet echt worden uitgelegd in de vraag, omdat het momenteel niet is gespecificeerd.

In dat geval kunt u DATE_FORMAT . gebruiken om alleen het tijdgedeelte te extraheren en de voorwaarde daarmee te herhalen:

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

Deze zoekopdracht zal de 3 rij uitsluiten van het resultaat.




  1. Wat is het verschil tussen mysql.createConnection en mysql.createPool in de Node.js MySQL-module?

  2. Waarom werkt dit voorbeeld van selecteren voor update?

  3. Oracle en Left Outer Join

  4. Hoe twee tabellen in één instructie in SQL Server 2005 bij te werken?