Działania na godzinach

Odpowiedz Nowy wątek
2017-06-21 20:46
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 ? h:mm:s ?

Pozostało 580 znaków

2017-06-21 21:41
0

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


Bydgoszcz, Senior .Net Developer
To nie jest też do końca poprawna składnia, ale już jest jej bliżej do standardu SQL:2008 niż użycie LIMIT, które w ogóle nie jest w standardzie: https://stackoverflow.com/a/595182/1017941 - hauleth 2017-06-22 21:03

Pozostało 580 znaków

2017-06-21 21:47
0
Slepiec napisał(a):

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

Firebird 1.5

no to ja odpadam, nie moja dziedzina, ja tylko SQL Server, Postgresql i czasem MySQL'a dotykam - Slepiec 2017-06-21 21:51

Pozostało 580 znaków

2017-06-22 20:56

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

Pozostało 580 znaków

2017-06-23 20:49
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 12:00:00 tak mi wychodzi np.. 3,96

Pozostało 580 znaków

2017-06-30 21:58
1

@Molnas masz tu w sumie problem, bo czas w formacie 12:00:00 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

Pozostało 580 znaków

2017-07-02 02:00
0

Piękne dzięki

edytowany 1x, ostatnio: furious programming, 2017-07-02 02:37
@Molnas nie ma za co :) - Mr.YaHooo 2017-07-02 12:29

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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