Според документацията на PostgreSQL има две функции, наречени to_timestamp()
:
- Човек преобразува епохата на Unix във времева марка. Unix епохата е броят на секундите от 1970-01-01 00:00:00+00.
- Другият преобразува низ във времева марка.
По-конкретно, всяка функция преобразува стойността в клеймо за време с часова зона стойност.
Въпреки че документацията на Postgres ги представя като две отделни to_timestamp()
функции, представям ги така, сякаш са една функция, която приема или един аргумент, или два.
Синтаксис
Можете да използвате to_timestamp()
по следните начини:
to_timestamp(double precision)
to_timestamp(text, text)
Използвайки първия синтаксис, аргументът се предоставя като двойна точност стойност, а това е стойността на епохата, с двойна точност, която искате да преобразувате във времева марка.
Използвайки втория синтаксис, първият аргумент е датата, а вторият аргумент е низът за формат.
Преобразуване на Unix Epoch
Ето основен пример, за да демонстрирате как да преобразувате епохата във времева марка.
SELECT to_timestamp(1658792421);
Резултат:
2022-07-26 09:40:21+10
В моя случай изместването на часовата зона е +10 и това е, което се връща.
Дробни секунди
Ето пример с дробни секунди.
SELECT to_timestamp(1658792421.123456);
Резултат:
2022-07-26 09:40:21.123456+10
Форматиране
Ето пример за използване на втория синтаксис за форматиране на стойност за дата.
SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');
Резултат:
2022-10-21 00:00:00+10
Вторият аргумент е предоставен, за да посочи как е форматиран първият аргумент.
Ето друг формат, за да илюстрира допълнително тази точка.
SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');
Резултат:
2022-10-21 00:00:00+10
Ако форматът на втория аргумент не съвпада с формата на първия аргумент, може да получите грешка.
Например:
SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');
Резултат:
ERROR: invalid value "ober" for "YYYY" DETAIL: Value must be an integer.
Форматният низ (втори аргумент) може да бъде всеки шаблонен шаблон с незадължителен модификатор.
Ето пълен списък с шаблони и модификатори, които можете да използвате с тази функция.
Тип на връщане
Както споменахме, типът на връщане е timestamp с часова зона . Можем да проверим това с pg_typeof()
функция.
SELECT pg_typeof(to_timestamp(1658792421.123456));
Резултат:
timestamp with time zone
Извличане на части за дата
Можете да използвате различни методи, за да извлечете части за дата от стойността на клеймото за време.
Например, можете да използвате extract()
функция.
SELECT extract('month' from to_timestamp(1658792421));
Резултат:
7
И можете да използвате to_char()
функция, ако трябва да направите нещо подобно, покажете името на месеца вместо номера на месеца.
SELECT to_char(to_timestamp(1658792421), 'Month');
Резултат:
July
И тук използва синтаксиса на форматиране.
SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');
Резултат:
October
Ако имате само номера на месеца, можете да използвате следния пример, за да преобразувате номера на месеца в името на месеца.
SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');
Резултат:
March
И обратно (преобразувайте името на месеца в номер на месеца).
В следващия пример извличам номера на месеца, като използвам date_part()
като алтернатива на extract()
.
SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));
Резултат:
3