Porównywanie dat w bazie danych

0

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ć

4
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.

3

@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.

0

Dzięki :)
zmieniłem format w bazie

0

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

1

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.

0
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 :)

0

Polecam użycie dyrektywy BETWEEN.

1 użytkowników online, w tym zalogowanych: 0, gości: 1