DATA CZAS

MO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

Witam tak na pierwszy post początkującego :)

mam coś takiego

select * from table1 where czas .... i tu chciał bym aby zwróciło mi za każdym razem dane z dnia dzisiejszego od godziny 6 do 18 za każdym razem bez konieczności wpisywania danych z palca.

bazę mam na firebird 1.5

axelbest
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 2255
0

Pewnie musisz użyć w zapytaniu jakieś funkcji typu currentTime - wydzielić z niej tylko datę (pewnie jakaś funkcja formatDate). Potem jako datę początku dasz tego currentTime + "6:00" (jakaś konkatenacja) i jako datę końca analogicznie. Potem musisz pewnie użyć funckji between (o ile jest dostępna) ew zrobić coś takiego (pseudokod) where date>poczatek and date<koniec.

john_klamka
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 177
1

W Firebirdzie 1.5 masz zmienne current_date i current_timestamp, które podlegają normalnym operacjom arytmetycznym.

Kopiuj
select something from mytable where somedate > current_date - 10
MO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0
john_klamka napisał(a):

W Firebirdzie 1.5 masz stałe current_date i current_timestamp, które podlegają normalnym operacjom arytmetycznym.

Kopiuj
select something from mytable where somedate > current_date - 10

Tak kombinowałem ale jak zrobię zapytanie o 14 wyjdzie wcześniej tu bardziej mi chodziło o mechanizm który pobierze dane tylko z danego zakresu np NOW od 6

MO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

Wielkie dzięki i się udało :)

Kopiuj

```CAST(czas as Time) BETWEEN '06:00:00' and '18:00:00'```

Teraz jak mam zsumowaną wartość sekund jak to odjąć od np current_time ? tak aby wyszła liczna ile coś trwało

MO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

select first 1 ((cast (czas as time)) - cast(CURRENT_TIME as TIME)) from raporth
where
CAST(czas as Time) BETWEEN '06:00:00' and '18:00:00'>

Chciał bym aby zwróciło różnicę pomiędzy dwoma czasami ale coś nie do końca działa może ktoś coś podpowie.

axelbest
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 2255
0

A datę ustawiasz? czy tylko godziny? Powyższe zapytanie moim zdaniem zwróci Ci wyniki z różnych dni.
Poza tym przekombinowałeś w selekcie - nie możesz tam po prostu pobierać właściwych danych? Przecież w WHERE odfiltrujesz sobie to co Ci jest potrzebne

MO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

Tak datę ustawiam. Chcę aby zwróciło mi ile opłynęło czasu od rana do chwili zapytania. Dodam że mam to na Firebirdzie 1.5

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
1

Funkcja datediff weszła oczywiście dopiero w FB 2.1 (pfff). Dlatego tutaj proponuję zrobić coś takiego: zamienić obie daty na liczbę (unix timestamp), następnie odjąć jedną od drugiej i zmienić z powrotem na datę.

Alternatywą jest trzymanie wszystkich dat jako unix timestamp. I moim zdaniem jest to dużo lepsze rozwiązanie.

MO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0
Juhas napisał(a):

Funkcja datediff weszła oczywiście dopiero w FB 2.1 (pfff). Dlatego tutaj proponuję zrobić coś takiego: zamienić obie daty na liczbę (unix timestamp), następnie odjąć jedną od drugiej i zmienić z powrotem na datę.

Alternatywą jest trzymanie wszystkich dat jako unix timestamp. I moim zdaniem jest to dużo lepsze rozwiązanie.

Dzięki niestety nie jestem twórca bazy wiec muszę coś zrobić z tym co mam.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

No to moja pierwsza odpowiedź.

MO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

'min((cast (czas as time))- cast(current_time as TIME)) /3600 as TIMES '

Coś takiego mi wyszło pewnie nie do końca poprawnie ale zwróciło jak w warunku dałem dzisiaj, może ktoś coś dopowie.

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.