Metody formátování PostgreSQL zahrnují užitečnou kolekci nástrojů pro překlad různých datových typů (datum / čas, celé číslo, plovoucí desetinná čárka, číslice) na formátované řetězce a překlad formátovaných řetězců zpět na jedinečné datové typy. Od nynějška někdy také musíme převádět časová pásma. Načasování se vždy zaznamenává v UTC v časových značkách PostgreSQL pro datový formulář časových pásem, ale ve výchozím nastavení se zobrazuje v prohlížeči, relaci nebo místním čase uživatele. Jednou z jeho pomocných funkcí, na které jsme se spoléhali, je metoda TO_CHAR (), která mimo jiné umožňuje časová razítka a časová razítka s časovým pásmem a umožňuje vám uspořádat části časového razítka, jak chcete. Časové razítko, dvojitá přesnost, doba trvání, číslo nebo číselná hodnota lze všechny převést na řetězec pomocí metody PostgreSQL TO_CHAR (). Zdá se, že existuje metoda s jedním argumentem „to_timestamp“, která bere argument s dvojitou přesností a transformuje z epochy Unixu na časovou značku pomocí časové zóny. V tomto příspěvku vám ukážeme, jak s tím něco udělat. Pojďme se nejprve blíže podívat na to_char ().
Syntax:
Obecná syntaxe pro funkci to_char () je následující:
>> To_char (výraz, formát);Metoda TO_CHAR () v PostgreSQL potřebuje dvě tvrzení:
- Výraz: Jako výrazy lze použít časové razítko, dobu trvání, číslo, dvojitou přesnost nebo číselnou hodnotu, která je přeložena na řetězec podle konkrétního formátu.
- Formát: Styl, ve kterém bude zobrazen výstupní řetězec. Formát se může lišit podle typu výrazu, např.G., číslo, datum.
V PostgreSQL jsou k dispozici dva typy časových značek:
- Časové razítko: bez časového pásma.
- Timestamptz: s časovým pásmem.
A tady je problém: standardní datový formulář časového razítka nezná časová pásma. A je to nezbytnost SQL (jak se to mohlo stát, zdá se za). Naším hlavním zaměřením je naučit se časové razítko_Char () s časovým pásmem. Chcete-li začít pracovat na PostgreSQL s funkcí 'to_char ()', otevřete prostředí příkazového řádku PostgreSQL a doručte hodnoty parametrů pro povinný server, databázi, číslo portu, uživatelské jméno a heslo. Pokud potřebujete využít výchozí určené parametry, jak je znázorněno na následujícím obrázku, nechte tyto úvahy nevyplněné.
To_char () pro číslo řetězce
Abyste pochopili koncept funkce to_Char () pomocí časové značky s časovým pásmem, musíte nejprve vyzkoušet příklad čísel řetězců. Takže máme číslo '1897' a převedeme ho na '9999.99 'formát pomocí níže uvedeného dotazu. Z níže uvedeného výstupu můžete vidět, že číslo řetězce bylo převedeno do zadaného formátu.
>> SELECT to_char (1897, '9999.99 ');
Zde je další ilustrace pro převod. Tentokrát jsme číslo převedli do jiného formátu, který obsahuje čárku. K zadání čárky se použije znak „G“.
>> SELECT to_char (367.78, '9G999.99 ');
To_char Timestamp with TimeZone
Abychom porozuměli konceptu časové značky s časovým pásmem, pojďme zvážit jednoduchý příklad. Předpokládejme, že jste v „Pákistánu“, takže vaše časové pásmo musí být nyní „PKT“.
Příklad 01:
Zkusme načíst aktuální časové razítko v dotazu SELECT a převádět jej do formátu Datum a čas, jak je znázorněno v dotazu níže. Termín „TZ“ se používá k vrácení aktuální časové zóny. Výstup zobrazuje den, datum, čas a časové pásmo.
>> SELECT to_char (CURRENT_TIMESTAMP, 'Day Mon dd, yyyy HH12: MI AM (TZ)');
Změňme naše časové pásmo na „Evropa / Řím“.
>> SET TimeZone = 'Europe / Rome';
Po vyzkoušení stejného dotazu SELECT získáte jiný čas, datum a časové pásmo, jak je znázorněno.
Příklad 02:
Když zadáte TimeZone v dotazu SELECT, nebude výstup zobrazovat aktuální časové pásmo podle níže uvedeného výstupu.
>> SELECT to_char (CURRENT_TIMESTAMP AT TIME ZONE 'Asia / Jerusalem', 'yyyy HH12: MI AM (TZ)');
Příklad 03:
Vytvořme rychlou tabulku s názvem „čas“ se dvěma poli. Jeden je typu TIMESTAMP a druhý je typu TIMESTAMPTZ.
>> CREATE TABLE time (without_timezone TIMESTAMP, with_timezone TIMESTAMPTZ);
Nyní zkontrolujeme aktuální časové pásmo, které používáme v našem systému, pomocí příkazu SHOW v shellu následujícím způsobem:
>> ZOBRAZIT časové pásmo;
Nyní musíte vložit aktuální hodnoty data a času aktuálního časového pásma, které používáte ve svém zařízení, do tabulky „time“ pomocí funkce „now ()“, jak je znázorněno níže.
>> INSERT INTO time VALUES (now (), now ());
Nyní můžete načíst záznam z tabulky „time“ pomocí dotazu SELECT, jak je uvedeno níže. Sloupec „without_timezone“ zobrazuje aktuální datum a čas bez časového pásma, zatímco sloupec „with_timezone“ zobrazuje místní čas s časovým pásmem úplně.
>> VYBRAT * Z ČASU;
Pojďme z níže uvedeného dotazu změnit časové pásmo na „US / EASTERN“.
>> NASTAVTE ČASOVOU ZÓNU „USA / VÝCHODNÍ“;
Nyní se podívejme na tabulku znovu. Uvidíte, jak se zobrazila hodnota sloupce „with_timezone“ podle časového pásma „US / EASTERN“, ale hodnota „without_timezone“ je stejná jako předtím.
>> VYBRAT * Z ČASU;
Příklad 04:
Pojďme si udělat několik dalších příkladů pro metodu to_char (). Předpokládejme stejný „čas“ výše uvedené tabulky. Budeme převádět hodnotu sloupce „without_timezone“ na řetězec, který je tvořen hodinami, minutami, sekundami a časovým pásmem. Zkusme dotaz SELECT pomocí metody to_char () pro převod hodnoty sloupce 'without_timezone'. V našem dotazu jsme zmínili „TZ“, ale časové pásmo se nezobrazí, protože hodnota sloupce nespočívá v časovém pásmu. Níže uvedený příkaz dává výstup:
>> SELECT to_char (without_timezone, 'HH12: MI: SS TZ') FROM time;
Nyní zkusme stejný dotaz v případě druhého sloupce 'with_timezone', převést jej na řetězec hodin, minut, sekund a časových pásem. Tentokrát se také zobrazí časové pásmo s časem pomocí níže uvedeného dotazu.
>> SELECT to_char (with_timezone, 'HH12: MI: SS TZ') FROM time;
Závěr:
Vzhledem k tomu, že problém s časovým pásmem / bez něj ovlivňuje více než jen rozdělení tabulky, doporučuji použít typ časového pásma, kdykoli je to možné. Téměř všechny pokyny pojednávaly o tom, jak provádět časově závislé čištění v PostgreSQL pomocí místních hodin. Správné řešení citlivé na časové pásmo přináší malé komplikace, ale v budoucnu by vás mohlo zachránit před problémy.