DATA CZAS

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

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.

1

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

select something from mytable where somedate > current_date - 10
0
john_klamka napisał(a):

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

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

0

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


```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

0

select first 1 ((cast (czas as time)) - cast(CURRENT_TIME as TIME)) from raporth
where
CAST(czas as Time) BETWEEN '0600' and '1800'>

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.

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

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

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.

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.

0

No to moja pierwsza odpowiedź.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1