Podle dokumentace PostgreSQL existují dvě funkce zvané to_timestamp()
:
- Jeden převede epochu Unixu na časové razítko. Unixová epocha je počet sekund od 1970-01-01 00:00:00+00.
- Druhý převede řetězec na časové razítko.
Přesněji řečeno, každá funkce převede hodnotu na časové razítko s časovým pásmem hodnotu.
Ačkoli dokumentace Postgres je prezentuje jako dvě samostatné to_timestamp()
funkce, prezentuji je, jako by to byla jedna funkce, která přijímá buď jeden argument, nebo dva.
Syntaxe
Můžete použít to_timestamp()
následujícími způsoby:
to_timestamp(double precision)
to_timestamp(text, text)
Při použití první syntaxe je argument poskytnut jako dvojitá přesnost hodnotu, a je to hodnota Epoch, s dvojnásobnou přesností, kterou chcete převést na časové razítko.
Při použití druhé syntaxe je prvním argumentem datum a druhým argumentem je formátovací řetězec.
Převést epochu Unix
Zde je základní příklad, který demonstruje, jak převést Epochu na časové razítko.
SELECT to_timestamp(1658792421);
Výsledek:
2022-07-26 09:40:21+10
V mém případě je posun časového pásma +10 a to je to, co se vrací.
Zlomkové sekundy
Zde je příklad se zlomky sekund.
SELECT to_timestamp(1658792421.123456);
Výsledek:
2022-07-26 09:40:21.123456+10
Formátování
Zde je příklad použití druhé syntaxe k formátování hodnoty data.
SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');
Výsledek:
2022-10-21 00:00:00+10
Druhý argument je poskytován k označení, jak je formátován první argument.
Zde je další formát pro další ilustraci tohoto bodu.
SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');
Výsledek:
2022-10-21 00:00:00+10
Pokud formát druhého argumentu neodpovídá formátu prvního argumentu, můžete skončit s chybou.
Například:
SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');
Výsledek:
ERROR: invalid value "ober" for "YYYY" DETAIL: Value must be an integer.
Formátovací řetězec (druhý argument) může být libovolný vzor šablony s volitelným modifikátorem.
Zde je úplný seznam vzorů šablon a modifikátorů, které můžete s touto funkcí použít.
Typ návratu
Jak již bylo zmíněno, návratový typ je časové razítko s časovým pásmem . Můžeme to ověřit pomocí pg_typeof()
funkce.
SELECT pg_typeof(to_timestamp(1658792421.123456));
Výsledek:
timestamp with time zone
Extrakce částí data
K extrakci částí data z hodnoty časového razítka můžete použít různé metody.
Můžete například použít extract()
funkce.
SELECT extract('month' from to_timestamp(1658792421));
Výsledek:
7
A můžete použít to_char()
Pokud potřebujete něco udělat, zobrazte název měsíce místo čísla měsíce.
SELECT to_char(to_timestamp(1658792421), 'Month');
Výsledek:
July
A zde používá formátovací syntaxi.
SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');
Výsledek:
October
Pokud máte pouze číslo měsíce, můžete pomocí následujícího příkladu převést číslo měsíce na název měsíce.
SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');
Výsledek:
March
A naopak (převeďte název měsíce na číslo měsíce).
V následujícím příkladu extrahuji číslo měsíce pomocí date_part()
jako alternativu k extract()
.
SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));
Výsledek:
3