Działania na godzinach

0

Witam,
Mam coś takiego
select first 1 ((current_time)-cast(czas as TIME) )
Czy da się to z powrotem złożyć jako czas ? hs ?

0

Co to za dialekt SQL'a ? nie kojarzę składni z first

0
Slepiec napisał(a):

Co to za dialekt SQL'a ? nie kojarzę składni z first

Firebird 1.5

0

@Molnas ale przecież taka różnica timestamp'ów jest liczbą sekund. Możesz sobie dokonać konwersji sam http://www.firebirdfaq.org/faq36/

0
Mr.YaHooo napisał(a):

@Molnas ale przecież taka różnica timestamp'ów jest liczbą sekund. Możesz sobie dokonać konwersji sam http://www.firebirdfaq.org/faq36/

Dziękim myślałem bardziej o złożeniu do formatu 1200 tak mi wychodzi np.. 3,96

1

@Molnas masz tu w sumie problem, bo czas w formacie 1200 ma zakres tylko 24h, a co mamy zrobić jak godzin będzie 50? Automatem tego niestety nie zrobisz. Ale za to możesz to załatwić za pomocą UDF albo jakiejś stored procedure która zwróci Ci po prostu stringa. Tak na szybko coś napisane będzie wyglądać tak:

SET TERM ^ ;

create or alter procedure SECONDS_TO_TIME (
    SECONDS integer)
returns (
    FORMATED_TIME varchar(15))
as
declare variable HH integer;
declare variable MM integer;
declare variable SS integer;
begin
  /* Procedure Text */

  SS = MOD(SECONDS,60);
  SECONDS = SECONDS / 60;

  MM = MOD(SECONDS,60);
  SECONDS = SECONDS / 60;

  HH = SECONDS;

  FORMATED_TIME = HH || ':' || MM || ':' || SS;

  suspend;
end^

SET TERM ; ^

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE SECONDS_TO_TIME TO SYSDBA;

Użycie:

select * from SECONDS_TO_TIME(1243)

daje wynik:

0:20:43

Jest tylko jedno ale. Nie uzupełniam do 2 zer. A to z tego powodu, że szukasz rozwiązania dla FB 1.5. A LPAD pojawiło się dopiero w 2.1. Jednak możesz użyć tego https://firebirdsql.org/refdocs/langrefupd20-udf-lpad.html

0

Piękne dzięki

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