Cześć,
czy jest możliwość porównywać daty które w bazie mam jako string?
Mam w bazie daty zapisane w kolumnie date jako 1/3/2022 - jest spowodowane potrzebą takiego formatu po stronie front.
Teraz chcę zrobić zapytanie które pobierze wszystkie rekordy od dziś na 5 dni do przodu i nie wiem jak to zrobić
ssquad napisał(a):
Mam w bazie daty zapisane w kolumnie date jako 1/3/2022 - jest spowodowane potrzebą takiego formatu po stronie front.
Co za głupia decyzja. Nie mogłeś tego trzymać jako datetime
albo timestamp
? I wyświetlić na froncie w jakimbyś sobie tylko formacie nie chciał?
Łączenie widoku i persystencji to pierwszy krok do legacy i spaghetti code'u.
Teraz chcę zrobić zapytanie które pobierze wszystkie rekordy od dziś na 5 dni do przodu i nie wiem jak to zrobić
Musiałbyś sparsować ten string na datę lub timestamp i porównać; bo zakładam żę ten zapis dat jest "timezone-naive", tzn nie ma informacji o strefie czasowej?
Moja rada: jeśli jeszcze możesz, to zmień ten typ pola ze string/varchar na datetime
albo timestamp
.
@ssquad: Tak jak napisał @TomRiddle - pozbądź się tego formatu. Jeżeli jednak chciałbyś sobie coś na szybko wykombinować to spróbuj z funkcją MySQL str_to_date(), przykładowo:
SELECT * FROM `table_name` where STR_TO_DATE(`col_date`, '%d/%m/%Y') > '2022-03-06'
Znajdzie wszystkie rekordy dla daty 7/3/2022, 8/3/2022 9/3/2022 itd.
Dzięki :)
zmieniłem format w bazie
Cześć.
Używałem dat w wielu projektach i zawsze z formatem daty jest problem.
Odkąd zacząłem zapisywać datę jako int w formacie timestamp- porównywanie dat / dodawanie / odejmowanie dni /miesięcy itd. przestało być problemem
Polecam :)
Przecież jest mnóstwo funkcji do operacji na dacie i czasie.
miccom napisał(a):
Cześć.
Używałem dat w wielu projektach i zawsze z formatem daty jest problem.
Odkąd zacząłem zapisywać datę jako int w formacie timestamp- porównywanie dat / dodawanie / odejmowanie dni /miesięcy itd. przestało być problemem
Polecam :)
Nie, to zły pomysł - co w sytuacji, kiedy chcesz np. zanotować w jakiej strefie czasowej jest dana data i czas? Będzie stosował dodatkową kolumnę żeby tam jakoś to wyrzeźbić? Tymczasem są typy np. timestamp które mają dodatkowo strefę czasową. Operacje na datach są proste, wystarczy wziąć pupę w troki i poczytać o funkcjach daty / czasu, niektórym nawet tego się nie chce.
TomRZ napisał(a):
Przecież jest mnóstwo funkcji do operacji na dacie i czasie.
miccom napisał(a):
Cześć.
Używałem dat w wielu projektach i zawsze z formatem daty jest problem.
Odkąd zacząłem zapisywać datę jako int w formacie timestamp- porównywanie dat / dodawanie / odejmowanie dni /miesięcy itd. przestało być problemem
Polecam :)Nie, to zły pomysł - co w sytuacji, kiedy chcesz np. zanotować w jakiej strefie czasowej jest dana data i czas? Będzie stosował dodatkową kolumnę żeby tam jakoś to wyrzeźbić? Tymczasem są typy np. timestamp które mają dodatkowo strefę czasową. Operacje na datach są proste, wystarczy wziąć pupę w troki i poczytać o funkcjach daty / czasu, niektórym nawet tego się nie chce.
To podrzuć jakiś kod do wyciągania z bazy danych elementów pomiędzy dwoma datami :) Aż jestem ciekaw jak to rozwiązujesz u siebie :)
Polecam użycie dyrektywy BETWEEN
.