data+czas
-
- Posty: 224
- Rejestracja: pn wrz 23, 2013 2:48 pm
data+czas
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
kolumna ma dane w postaci:2020-05-25 18:00:00
LibreOffice 7.6
Re: data+czas
Musisz zrobić Kwerendę, np taką:
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:
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:
Lub inaczej
Zostawiam Tobie sprawdzenie jak zachowa się ten warunek 31 grudnia lub 1 stycznia...
Kod: Zaznacz cały
SELECT "NazwaTabeli".* FROM "NazwaTabeli"
where CAST("data" as DATE) Between '2020-05-19' and '2020-05-21'
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
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
Kod: Zaznacz cały
WHERE DAYOFYEAR( "data" ) - DAYOFYEAR( CURRENT_DATE ) BETWEEN - 1 AND 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
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Re: data+czas
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:
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
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
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
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
-
- Posty: 224
- Rejestracja: pn wrz 23, 2013 2:48 pm
data dzisiaj i jutro
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()
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
Powód: Połączyłem Twój nowy post ze starym, gdyż dotyczy tego samego problemu
LibreOffice 7.6
Re: data dzisiaj i jutro
Widzę, że ciągle masz z tym problem dlatego tym razem rozwiązanie zaprezentuję na zdjęciu:
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.
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)
'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
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Re: data+czas
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:
*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ę.
Kod: Zaznacz cały
CAST( "h_start" AS DATE )
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
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP