Strona 1 z 1

data+czas

PostNapisane: Cz maja 21, 2020 2:36 pm
przez dentopolis
chciałbym spośród danych wyświetlić te, które mieszczą się w granicy czasowej większej od dziś do jutra. próbowałem NOW(), CUDATE(), CURRENT_TIMESTAMP().nic nie działa. brak funkcji w BASE?
kolumna ma dane w postaci:2020-05-25 18:00:00

Re: data+czas

PostNapisane: Cz maja 21, 2020 5:21 pm
przez Rafkus
Musisz zrobić Kwerendę, np taką:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
SELECT "NazwaTabeli".* FROM "NazwaTabeli"
where  CAST("data" as DATE) Between '2020-05-19' and '2020-05-21'

wyjaśnienie kodu:
SELECT "NazwaTabeli".* FROM "NazwaTabeli" - Wyświetl wszystkie pola z tabeli "NazwaTabeli"
where - gdy
"data" jest to pole z twoim znacznikiem czasu: 2020-05-25 18:00:00
CAST("data" as DATE) - zmienia twój znacznik czasu na wartość typowo datową (pozbywasz się czasu) - uzyskasz 2020-05-25
Between '2020-05-20' and '2020-05-22' - twój znacznik czasu ma być z tego przedziału tutaj ustaliłem go na "sztywno"

Wstawienie daty dzisiejszej nie jest problemem - wystarczy użyć polecenia CURDATE() lub CURRENT_DATE.
wyświetlenie rekordów od-do jakieś daty do-od dzisiejszej też nie jest problemem, wystarczy zastosować polecenie:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
SELECT "NazwaTabeli".* FROM "NazwaTabeli"
where DATEDIFF( 'dd', CAST( "data" AS DATE ), CURDATE( ) ) < 5

gdzie:
DATEDIFF - zwraca liczbę jednostek czasu, które upłynęły od CAST( "data" AS DATE ) do daty dzisiejszej. Jednostkę czasu określam tekstem: 'dd' - to oznacza dzień, tu taj wybrałem że interesują mnie daty z przedziału ostatnich 5 dni

Data jutrzejsza, jest problemem bo takiej funkcji nie ma. Myślę, że można by to rozwiązać przy pomocy funkcji DAYOFYEAR (data) - zwraca dzień roku (1-366), sprawdzam...
O tak, działa - wybrałem daty od wczoraj do jutra:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
WHERE DAYOFYEAR( "data" ) BETWEEN DAYOFYEAR( CURRENT_DATE ) - 1 AND DAYOFYEAR( CURRENT_DATE ) + 1

Lub inaczej
Kod: Zaznacz cały   Rozszerz widokZwiń widok
WHERE DAYOFYEAR( "data" ) - DAYOFYEAR( CURRENT_DATE ) BETWEEN - 1 AND 1

Zostawiam Tobie sprawdzenie jak zachowa się ten warunek 31 grudnia lub 1 stycznia...

Re: data+czas

PostNapisane: Cz maja 21, 2020 6:35 pm
przez Rafkus
Sprostowanie:
Troszkę się zakręciłem przy zagadnieniu jak obliczyć datę jutrzejszą, aż zapomniałem że do wyznaczenia przedziału dat od wczorajszej do jutrzejszej nie potrzebuję wiedzieć który jest jutro dzień. Potrzebuję wiedzieć jaka jest różnica w dniach pomiędzy dniem dzisiejszym a dniem wpisanym do pola "data", zatem wystarczy ten warunek:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
where DATEDIFF( 'dd', CAST( "data" AS DATE ), CURRENT_DATE ) BETWEEN - 1 AND 1

Przeanalizujmy funkcję DATEDIFF, załóżmy że w polu "data" będą między innymi przechowywane daty wczorajsza, dzisiejsza, jutrzejsza; CURRENT_DATE daje datę dzisiejszą, więc:
DATEDIFF( 'dd', wczoraj, dzisiaj ) da wynik 1
DATEDIFF( 'dd', dzisiaj, dzisiaj ) da wynik 0
DATEDIFF( 'dd', jutro, dzisiaj ) da wynik -1

można też bez konwersji znacznika czasu:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
where DATEDIFF( 'dd', "data" , CURRENT_TIMESTAMP ) BETWEEN - 1 AND 1

CURRENT_TIMESTAMP - zwraca bieżący znacznik czasu, datę i czas jednocześnie