Mysql
 sql >> Baza danych >  >> RDS >> Mysql

AM/PM nie działa przy użyciu między w sql

Lepiej przechowuj daty jako DATETIME . Ponieważ masz te wartości, pokazuje już, że pola Twojej bazy danych nie są z date wpisz, jak wstawienie takich ciągów do date pola nie powodowałyby błędu.

Jeśli nie można tego zmienić, możesz użyć STR_TO_DATE funkcja:

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

Ale to naprawdę gorsze rozwiązanie.

Mimo to oczekiwanie, że otrzymasz tylko jeden wiersz, wydaje się dziwne. Z pewnością trzeci wiersz spełnia ten wymóg, ponieważ daty rozpoczęcia/zakończenia są przed/po sprawdzanej dacie, niezależnie od części czasowych.

Uzupełnienie

W komentarzach mówisz, że chcesz zastosować inną logikę. zgaduję chcesz osobno porównać składniki daty i godziny, a oba te elementy są zgodne z between stan. To naprawdę powinno być wyjaśnione w pytaniu, ponieważ obecnie nie jest to określone.

W takim przypadku możesz użyć DATE_FORMAT aby wyodrębnić tylko część czasu i powtórzyć z tym warunek:

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

To zapytanie wykluczy 3 wiersze z wyniku.




  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 - GROUP_CONCAT z przyłączeniami

  2. Python łączy się z bazą danych MySQL za pomocą złącza MySQL i przykładu PyMySQL

  3. jooq rozszerza istniejący dialekt. Zaadoptuj dialekt MySQL do dialektu Apache Hive

  4. sterownik mysql oledb

  5. Procedura MySQL w Select?