2012-05-07 23 views
42

W instrukcji SQL, jak porównać datę zapisaną jako TIMESTAMP z datą w formacie RRRR-MM-DD?Jak porównać datownik z parametrem daty tylko w MySQL?

Np .: SELECT * FROM table WHERE timestamp = '2012-05-05'

Chcę ta kwerenda zwraca wszystkie wiersze zawierające znacznik czasu w określonym dniu, ale zwraca tylko wiersze o północy znacznik czasu.

dzięki

Odpowiedz

82

Można użyć funkcji DATE() wyodrębnić datę część datownika:

SELECT * FROM table 
WHERE DATE(timestamp) = '2012-05-05' 

Chociaż, jeśli masz indeksu na kolumnie timestamp, to byłoby szybciej, ponieważ może wykorzystuje indeks:

SELECT * FROM table 
WHERE timestamp BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59' 
+0

Który rodzaj wydajności jest lepszy? –

1

użycie funkcji konwersji mysql

SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05' 

To powinno działać

3
WHERE cast(timestamp as date) = '2012-05-05' 
3
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00' 
    AND timestamp <= '2012-05-05 23:59:59' 
0

W przypadku korzystania z parametrów SQL, aby uruchomić kwerendę, byłoby to pomocne

SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59') 
1
Use 

SELECT * FROM table WHERE DATE(2012-05-05 00:00:00) = '2012-05-05' 
0

Kiedy czytam twoje pytanie, Myślałem, że jesteś na Oracle DB, dopóki nie zobaczyłem tagu "MySQL". W każdym razie, dla osób pracujących z Oracle tutaj jest sposób:

SELECT * 
FROM table 
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');