przechowywać daty jako String
w mojej bazy danych, w tym formacie:Porównaj daty (przechowywane jako ciąg) w bazie danych Android sqlite?
YYYY-MM-DD HH:MM:SS
który jest jednym z obsługiwanych formatów (http://www.sqlite.org/lang_datefunc.html). Teraz chcę porównać te przechowywane daty (dobrze, ciągi) z innymi datami. Moje daty są przechowywane w kolumnie column_date
, więc próbuję to:
SELECT * FROM MyTable
WHERE
(Date(column_date) >= Date (2000-01-01) AND Datetime(column_date) <= Datetime (2050-01-01))
Jak czytać dokumentację, The date and time functions use a subset of IS0-8601 date and time formats. The date() function returns the date in this format: YYYY-MM-DD.
więc przypuszczam, że robię to dobrze - tworzę datę z przechowywanej ciąg i porównać je z datą utworzone z innych ciągów.
Ale to nie działa, nawet jeśli column_date
jest datą od tego roku i jak widać daty rozpoczęcia i zakończenia są bardzo życzliwe. Próbował również to (datetime używany zamiast data)
SELECT * FROM MyTable
WHERE
(datetime(column_date) >= Date (2000-01-01) AND datetime(column_date) <= Datetime (2050-01-01))
i to (zastosowanie między zamiast < = i> =)
SELECT * FROM MyTable
WHERE
(Date(column_date) between Date (2000-01-01) AND Datetime (2050-01-01))
i wszystkich innych możliwych kombinacji. Co ja do diabła robię źle, czy jestem głupi, czy dokumentacja kłamie, czy brakowało mi czegoś bardzo ważnego? Próbuję znaleźć rozwiązanie kilka godzin, ale nic nie działa ...
Nie wierzę, że jest to dokładne ... z dokumentów SQLite "Funkcja date() zwraca datę w tym formacie: RRRR-MM-DD". Sposób, w jaki to czytam oznacza, że nawet jeśli dane są przechowywane jako format DateTime, użycie 'Date()' spowoduje zwrócenie tylko części daty. Czy to nie jest poprawne? – Barak
to działa, ale wciąż nie mogę tego zrozumieć. W docs jego wyraźnie powiedział, że data, lub datetime return DATE. A moja kolumna to ciąg. Jak to możliwe, że możesz porównać String (= mydate) z datą (data utworzona z ciągu 2000-01-01 00:00:00 z użyciem funkcji datetime)? To nielogiczne. Dlaczego nie zastosowałeś Datetime również do mojej kolumny, jeśli jej ciąg? – qkx
tak faktycznie, dla mnie jest to logicznie poprawne: Datetime (ciąg mydate) <= Datetime (inny ciąg daty). Ale to nie działa, a twój kod działa;) Funny – qkx