Autor Téma: Date na varchar vo formáte DD.MM.YYY  (Přečteno 2435 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Date na varchar vo formáte DD.MM.YYY
« kdy: 27-02-2016, 13:55:17 »
Súčasťou selectu mám:
Kód: [Vybrat]
CAST(LANDLORD_FLAT.DateFrom as varchar(10)) ADDITIONALTITLEDostávam výsledok CCYY-MM-DD. Ako priamo v selecte dosiahnem požadovaný formát?
Predbežne to mám takto

Kód: [Vybrat]
       cast(EXTRACT(DAY from LANDLORD_FLAT.DATEFROM) as varchar (2)) ||'.'||
       cast(EXTRACT(MONTH from LANDLORD_FLAT.DATEFROM) as varchar (2)) ||'.'||
       cast(EXTRACT(YEAR from LANDLORD_FLAT.DATEFROM) as varchar (4))  aaa
« Poslední změna: 27-02-2016, 14:03:10 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #1 kdy: 27-02-2016, 14:46:06 »
Mám to takto
Kód: [Vybrat]
       '(' ||
       case
         when (extract (day from LANDLORD_FLAT.DATEFROM) < 10) then '0' || cast (extract (day from LANDLORD_FLAT.DATEFROM) as varchar (2))
         else cast (extract (day from LANDLORD_FLAT.DATEFROM) as varchar (2))
       end
       || '.' ||
       case
         when (extract (month from LANDLORD_FLAT.DATEFROM) < 10) then '0' || cast (extract (month from LANDLORD_FLAT.DATEFROM) as varchar (2))
         else cast (extract (month from LANDLORD_FLAT.DATEFROM) as varchar (2))
       end
       || '.' || cast (extract (year from LANDLORD_FLAT.DATEFROM) as varchar (4)) ||
       case
         when  LANDLORD_FLAT.DATETo is null then
         ' - neurčené'
         ELSE
         ' - ' ||
         case
           when (extract (day from LANDLORD_FLAT.DATETO) < 10) then '0' || cast (extract (day from LANDLORD_FLAT.DATETO) as varchar (2))
           else cast (extract (day from LANDLORD_FLAT.DATETO) as varchar (2))
         end
         || '.' ||
         case
           when (extract (month from LANDLORD_FLAT.DATETO) < 10) then '0' || cast (extract (month from LANDLORD_FLAT.DATETO) as varchar (2))
           else cast (extract (month from LANDLORD_FLAT.DATETO) as varchar (2))
         end
         || '.' || cast (extract (year from LANDLORD_FLAT.DATETO) as varchar (4))
       end


       || ')' ADDITIONALTITLE,
Ide to aj jednoduchšie?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 781
  • Karma: 43
    • Verze Delphi: 10.3
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #2 kdy: 27-02-2016, 15:26:38 »
Já bych to hlavně neformátoval v SELECTu, výsledné formátování bych dělal až u klienta (co když to bude používat Maďar...).

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #3 kdy: 27-02-2016, 15:29:14 »
Toho som si vedomý. Program sa bude používať jedine na Slovensku a potrebujem mať nutne dodržanú štruktúru Dataset-u. Mne sa z neho automaticky plní strom. Preto to musím mať v Select-e
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 781
  • Karma: 43
    • Verze Delphi: 10.3
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #4 kdy: 27-02-2016, 15:34:23 »
Tak možná inspirace aspoň tady:
http://www.firebirdfaq.org/faq314/

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #5 kdy: 27-02-2016, 15:38:40 »
To vyzerá zaujímavo. Hlavne ten substring. Ďakujem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 574
  • Karma: 25
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #6 kdy: 28-02-2016, 14:29:09 »
Toho som si vedomý. Program sa bude používať jedine na Slovensku a potrebujem mať nutne dodržanú štruktúru Dataset-u. Mne sa z neho automaticky plní strom. Preto to musím mať v Select-e

To fakt nejde vracet normální date a v UI pak říct, jak se má naformátovat?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #7 kdy: 28-02-2016, 14:49:51 »
Kvôli tej automatizácii plnenia to nejde. Mám natvrdo daný record pre VST podľa počtu úrovní + jeden text a číslo. Všetko je robené dynamicky. Nemám možnosť do toho vstupovať.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 781
  • Karma: 43
    • Verze Delphi: 10.3
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #8 kdy: 28-02-2016, 14:51:28 »
Ani si udělat na klientovi Calculated field?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #9 kdy: 28-02-2016, 15:25:41 »
Citace
Ani si udělat na klientovi Calculated field?
S tým nemám dobrú skúsenosť. A nie som sám. Možno sa mi podarí čosi vymyslieť :o
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 781
  • Karma: 43
    • Verze Delphi: 10.3
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #10 kdy: 28-02-2016, 15:27:28 »
V čem konkrétně? Posledních skoro 20 let je používám a nevybavuju si, že bych narazil na nějaký zádrhel...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #11 kdy: 28-02-2016, 18:27:37 »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 781
  • Karma: 43
    • Verze Delphi: 10.3
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #12 kdy: 28-02-2016, 18:43:01 »
Aha, já používám IBX komponenty, tam se mi to nestalo.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #13 kdy: 28-02-2016, 19:35:36 »
Tak som to vyriešil. Vtedy ma nenapadlo opakovať použitú techniku
Pôvodne
Kód: Delphi [Vybrat]
  1.   rSideTreeData = record
  2.     iPKList: TList<Integer>;      // Value of primary keys IDxxx
  3.     Title: WideString;            // Text to be displayed
  4.     AdditionalTitle: WideString;  // Text that is the last level added to Title. E.g. number flat + owner name
  5.     AdditionalIndex: Integer;     // Primary key AdditionalTitle
  6.   end;
  7.  
Po novom
Kód: Delphi [Vybrat]
  1.   rSideTreeData = record
  2.     iPKList: TList<Integer>;      // Value of primary keys IDxxx
  3.     Title: WideString;            // Text to be displayed
  4.     vOther: TList<Variant>;
  5.   end;
  6.  
Ale mám problém ako ošetriť ak je pole Null

Kód: Delphi [Vybrat]
  1.   for I := (FNumberOfLevel * 2) to (FqryFieldList.Count -1) do
  2.   begin
  3.     if FqryFieldList[I].IsNull then
  4.       NodeData.vOther.Add('')  // Čo mám dať sem?
  5.     else
  6.       NodeData.vOther.Add(FqryFieldList[I].AsVariant);
  7.   end;
  8.  
Podľa mňa to nie je  správne, nakoľko neviem aký typ tam bude
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2349
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Date na varchar vo formáte DD.MM.YYY
« Odpověď #14 kdy: 29-02-2016, 00:23:13 »
Toho som si vedomý. Program sa bude používať jedine na Slovensku a potrebujem mať nutne dodržanú štruktúru Dataset-u. Mne sa z neho automaticky plní strom. Preto to musím mať v Select-e

To fakt nejde vracet normální date a v UI pak říct, jak se má naformátovat?

Samozrejme jde, normalne se to vraci jako Date a da se specifikovat format, treba takto

TDateTimeField(ds.FieldByName('datum')).DisplayFormat  := 'dd.mm.yyyy hh:nn:ss'

Nebo se pri cteni hodnoty z datasetu provede formatovani. A dalsi moznosti.
Embarcadero MVP - Czech republic