data+czas

Użytkowanie programu bazodanowego

data+czas

Postprzez dentopolis » Cz maja 21, 2020 2:36 pm

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
LibreOffice 7.1
dentopolis
 
Posty: 193
Dołączył(a): Pn wrz 23, 2013 2:48 pm

Re: data+czas

Postprzez Rafkus » Cz maja 21, 2020 5:21 pm

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...
OpenOffice 4.1.6. oraz LibreOffice 7.1.6 Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Avatar użytkownika
Rafkus
 
Posty: 296
Dołączył(a): Cz kwi 12, 2018 10:26 pm

Re: data+czas

Postprzez Rafkus » Cz maja 21, 2020 6:35 pm

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
OpenOffice 4.1.6. oraz LibreOffice 7.1.6 Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Avatar użytkownika
Rafkus
 
Posty: 296
Dołączył(a): Cz kwi 12, 2018 10:26 pm

data dzisiaj i jutro

Postprzez dentopolis » Śr lip 21, 2021 10:20 pm

mam zapytanie query. chciałbym wyświetlić transakcje z dzisiejszej doby tylko, że czas mam zapisany jako datę i czas. jakie powinienem wpisać kryteria? próbowałem =DZIŚ(), =TODAY(), =DATE()
Załączniki
Screenshot_4.jpg
Ostatnio edytowano Cz lip 22, 2021 7:36 pm przez Rafkus, łącznie edytowano 1 raz
Powód: Połączyłem Twój nowy post ze starym, gdyż dotyczy tego samego problemu
LibreOffice 7.1
dentopolis
 
Posty: 193
Dołączył(a): Pn wrz 23, 2013 2:48 pm

Re: data dzisiaj i jutro

Postprzez Rafkus » Śr lip 21, 2021 11:23 pm

Widzę, że ciągle masz z tym problem dlatego tym razem rozwiązanie zaprezentuję na zdjęciu:
DATA.png

Widać na nim, że w kwerendzie zostało utworzone pole DATEDIFF..., które wyświetla ilość dni pomiędzy datą wpisaną do pola DataZam a aktualną chwilą otrzymaną przy pomocy polecenia CURRENT_TIMESTAMP. W kryterium podałem, że interesują mnie tylko dane w których ta różnica wynosi od -1 do 0, co odpowiadać będzie zawsze jutrzejszemu i dzisiejszemu dniowi.

Kod: Zaznacz cały   Rozszerz widokZwiń widok
DATEDIFF (jednostka_czasu, data1, data2)

DATEDIFF zwraca pełną liczbę jednostek czasu, które upłynęły od daty1 do daty2. Jednostka_czasu może przyjmować następujące wartości:
'ms' = 'millisecond' (milisekunda), 'ss' = 'second' (sekunda), 'mi' = 'minute' (minuta), 'hh' = 'hour' (godzina), 'dd' = 'day' (dzień), 'mm' = 'month' (miesiąc), 'yy' = 'year' (rok). Można używać zarówno długiej, jak i krótkiej nazwy.
OpenOffice 4.1.6. oraz LibreOffice 7.1.6 Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Avatar użytkownika
Rafkus
 
Posty: 296
Dołączył(a): Cz kwi 12, 2018 10:26 pm

Re: data+czas

Postprzez Rafkus » Pt lip 23, 2021 11:39 am

Innym sposobem jest pozbycie z takiego pola (daty i czasu) wartości reprezentującej czas. Można to zrobić wykorzystując polecenie CAST(). Do kwerendy, do nowego pola wpisz polecenie:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
CAST( "h_start" AS DATE )
*Oglądając twoje zdjęcie założyłem że pole "h_start" jest polem daty i czasu.

Wówczas do kryterium możesz wpisać np: '2021-07-22' jeśli chcesz wyświetlić dane tylko z tego dnia lub < '2021-07-22' dla danych z wcześniejszych dni itp. Dla wyświetlenia danych z dzisiejszego dnia wystarczy do kryterium wpisać CURRENT_DATE.
Uwaga: Base ze standardowo wbudowanym silnikiem HSQL w wersji 1.8 nie pozwala na obliczanie daty w postaci np: dzisiaj +1, nie ma również polecania podającego jutrzejszą datę.
OpenOffice 4.1.6. oraz LibreOffice 7.1.6 Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Avatar użytkownika
Rafkus
 
Posty: 296
Dołączył(a): Cz kwi 12, 2018 10:26 pm


Powrót do Base

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość