21
Dec

TIMESTAMP to STRING + ořez na Firebirdu/InterBase

Nedávno se v diskuzi objevil dotaz, jak překlopit datum a čas na string, a zároveň část uříznout (konec – setiny, vteřiny, atp.). Vzpomněl jsem si na trik Ivana Přenosila s přiřazením a vyjímkou. Stačilo tedy napsat proceduru:

SET TERM ^ ;
CREATE PROCEDURE TRUNCDATE (DATETIME VARCHAR(24))
RETURNS (RESULT VARCHAR(16))
AS
BEGIN
  result = '';
  result = datetime; --error, but the truncated value is assigned (I. Prenosil's tip)
  WHEN ANY DO EXIT; --catch error
END^
SET TERM ; ^

A bylo po problému. takto můžu ořezat co se mi zachce a jak se mi zachce. Stačí vyzkoušet:

execute procedure TruncDate(current_timestamp);

There's 4 Comments So Far

  • rob
    December 22nd, 2005 at 09:22

    a to Firebird nema nejakou funkci na vraceni podretezce?
    SUBSTRING(’01.01.2005 12:33:45′,1,16)

  • cincura.net
    December 22nd, 2005 at 12:51

    Ma (od FB 1.0), ale tohle je mnohem variabilnejsi. Muzes si pritom udelat i nejake jine silenosti.

    Hlavne toto funguje i na IB, kde (myslim) substring neni.

  • rob
    December 22nd, 2005 at 17:33

    No to by mne zajimalo v cem je to variabilnejsi?
    Silene to je samo o sobe dost ;-)

    Pokud to nekde neni tak to chapu, ale jinak mi to prijde silne zvrhle (uz jen to ze dojde k vyjimce, ktera se pak osetri musi nutne zanaset zbytecnou rezii).

  • cincura.net
    December 22nd, 2005 at 18:53

    Jo to je. Silene je to dost. Ale na IB jinou sanci nemas (jedine UDF).

    Variabilnejsi je to, protoze si tam muzes pridat treba vypocet kondiciogramu :) coz se substringem neudelas. ;)

Share your thoughts, leave a comment!