Mam pytanie: Czy można dokonać wyboru z bazy danych MySQL, porównując jeden ciąg DATY „2010-04-29” z ciągami przechowywanymi jako DATETIME (2010-04-29 10:00)?
Mam jeden selektor dat, który filtruje dane i chciałbym zapytać tabelę o pole DATETIME w następujący sposób:
SELECT * FROM `calendar` WHERE startTime = '2010-04-29'"
... i chciałbym uzyskać wiersz, który ma wartość DATETIME „2010-04-29 10:00”.
Jakieś sugestie? Dzięki.
mysql
datetime
comparison
Manny Calavera
źródło
źródło
startTime
jest indeksowane.Jeśli chcesz zaznaczyć wszystkie wiersze, w których część DATE w kolumnie DATETIME pasuje do określonego literału, nie możesz tego zrobić w ten sposób:
ponieważ MySQL nie może bezpośrednio porównywać DATY i DATY. To, co robi MySQL, rozszerza podany literał DATE o czas „00: 00: 00”. Więc twój stan się stanie
Na pewno nie to, czego chcesz!
Warunek jest zakresem i dlatego powinien być podany jako zakres. Możliwości jest kilka:
Istnieje niewielka możliwość, że pierwsza będzie błędna - gdy kolumna DATETIME używa rozdzielczości drugiej sekundy i jest umówione spotkanie o 23:59:59 + epsilon. Generalnie proponuję skorzystać z drugiego wariantu.
Oba warianty mogą używać indeksu na startTime, który stanie się ważny, gdy tabela wzrośnie.
źródło
date()
,year()
,datediff()
lub podobnym)00:00:00
. teraz moje wyniki mają sensSELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'"
LUB
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
źródło
SELECT * FROM sample_table WHERE last_visit = DATE_FORMAT('2014-11-24 10:48:09','%Y-%m-%d %H:%i:%s')
to dla formatu datetime w mysql przy użyciu
DATE_FORMAT(date,format)
.źródło
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29';
pomaga, możesz przekonwertować wartości tak jak
DATE
przed porównaniem.źródło
Możesz przesłać pole DATETIME na DATE jako:
SELECT * FROM `calendar` WHERE CAST(startTime AS DATE) = '2010-04-29'
Jest to bardzo wydajne.
źródło
startTime
jest indeksowanySELECT * FROM `calendar` WHERE startTime like '2010-04-29%'
Możesz także użyć operatorów porównania w datach MySQL, jeśli chcesz znaleźć coś przed lub po. Dzieje się tak, ponieważ są one zapisane w taki sposób (od największej do najmniejszej z zerami wiodącymi), że proste sortowanie ciągów posortuje je poprawnie.
źródło