data+czas

Użytkowanie programu bazodanowego
dentopolis
Posty: 224
Rejestracja: pn wrz 23, 2013 2:48 pm

data+czas

Post autor: 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
LibreOffice 7.6
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: data+czas

Post autor: Rafkus »

Musisz zrobić Kwerendę, np taką:

Kod: Zaznacz cały

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 z ostatnich paru dni też nie jest problemem, wystarczy zastosować polecenie:

Kod: Zaznacz cały

SELECT "NazwaTabeli".* FROM "NazwaTabeli" 
where DATEDIFF( 'dd',  "data" , CURDATE( ) ) < 5 
gdzie:
DATEDIFF - zwraca liczbę jednostek czasu, które upłynęły od "data" 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

 WHERE DAYOFYEAR( "data" ) BETWEEN DAYOFYEAR( CURRENT_DATE ) - 1 AND DAYOFYEAR( CURRENT_DATE ) + 1
Lub inaczej

Kod: Zaznacz cały

 WHERE DAYOFYEAR( "data" ) - DAYOFYEAR( CURRENT_DATE ) BETWEEN - 1 AND 1
Zostawiam Tobie sprawdzenie jak zachowa się ten warunek 31 grudnia lub 1 stycznia...
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: data+czas

Post autor: 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

where DATEDIFF( 'dd',  "data" , 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
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
dentopolis
Posty: 224
Rejestracja: pn wrz 23, 2013 2:48 pm

data dzisiaj i jutro

Post autor: dentopolis »

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 zmieniony czw lip 22, 2021 7:36 pm przez Rafkus, łącznie zmieniany 1 raz.
Powód: Połączyłem Twój nowy post ze starym, gdyż dotyczy tego samego problemu
LibreOffice 7.6
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: data dzisiaj i jutro

Post autor: Rafkus »

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

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.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: data+czas

Post autor: Rafkus »

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

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ę.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
ODPOWIEDZ