Porównywanie dat w bazie danych

Porównywanie dat w bazie danych
SS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 180
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ć

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
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.

L7
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 434
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:

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

SS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 180
0

Dzięki :)
zmieniłem format w bazie

miccom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tychy
  • Postów: 25
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 :)

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 700m n.p.m.
  • Postów: 681
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.

miccom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tychy
  • Postów: 25
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 :)

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 700m n.p.m.
  • Postów: 681
0

Polecam użycie dyrektywy BETWEEN.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.