Метка времени (timestamp) PostgreSQL To_char с часовым поясом

Метка времени (timestamp) PostgreSQL База данных

Методы форматирования PostgreSQL включают полезный набор инструментов для преобразования различных типов данных (дата / время, целые числа, числа с плавающей запятой, числовые) в форматированные строки и преобразования форматированных строк обратно в уникальные типы данных. Впредь иногда нам нужно также конвертировать часовые пояса. Время всегда записывается в формате UTC в метках времени PostgreSQL для формы данных часового пояса, но по умолчанию отображается в браузере, сеансе или по местному времени пользователя. Одна из его вспомогательных функций, на которую мы привыкли полагаться, — это метод TO_CHAR (), который, среди прочего, позволяет использовать метки времени и метки времени с часовым поясом и позволяет вам упорядочивать части метки времени, как вам нравится.

Метка времени, двойная точность, продолжительность, число или числовое значение могут быть преобразованы в строку с помощью метода PostgreSQL TO_CHAR (). Кажется, существует метод с одним аргументом, to_timestamp, который принимает аргумент с двойной точностью и преобразует эпоху Unix в метку времени с использованием часового пояса. В этом посте мы покажем вам, как что-то с этим сделать. Давайте сначала подробнее рассмотрим to_char ().

Синтаксис

Общий синтаксис функции to_char () следующий:

>> To_char( expression, format );

Метод TO_CHAR () в PostgreSQL требует двух утверждений:

  • Выражение: метка времени, продолжительность, число, двойная точность или числовое значение, которое переводится в строку в соответствии с определенным форматом, могут использоваться как выражения.
  • Формат: стиль, в котором будет отображаться строка вывода. Формат может отличаться в зависимости от типа выражения, например числа, даты.

В PostgreSQL доступны два типа временных меток:

  • Отметка времени: без часового пояса.
  • Timestamptz: с часовым поясом.

И вот в чем проблема: стандартная форма данных временных меток не учитывает часовые пояса. И это необходимость в SQL (как это могло произойти, кажется, за гранью). Наша основная цель — изучить метку времени to_Char () с часовым поясом. Чтобы начать работу с PostgreSQL с функцией to_char (), откройте оболочку командной строки PostgreSQL и введите значения параметров для обязательного сервера, базы данных, номера порта, имени пользователя и пароля. Оставьте эти соображения незаполненными, если вам нужно использовать параметры по умолчанию, как показано на изображении ниже.

Читайте также:  Lag Postgresql

Оставьте эти соображения незаполненными, если вам нужно

To_char () для строкового числа

Чтобы понять концепцию функции to_Char (), использующей временную метку с часовым поясом, вы должны сначала попробовать пример строковых чисел. Итак, у нас есть число «1897», и мы будем преобразовывать его в формат «9999,99», используя запрос ниже. Из выходных данных ниже видно, что номер строки был преобразован в указанный формат.

>> SELECT to_char(1897, ‘9999.99);

Чтобы понять концепцию функции to_Char

Вот еще один пример обращения. На этот раз мы преобразовали число в другой формат, добавив в него запятую. Символ «G» будет использоваться для обозначения запятой.

>> SELECT to_char(367.78, ‘9G999.99’);

Вот еще один пример обращения

To_char Timestamp с часовым поясом

Чтобы понять концепцию отметки времени с часовым поясом, давайте рассмотрим простой пример. Предположим, вы находитесь в «Пакистане», поэтому сейчас ваш часовой пояс должен быть «PKT».

Пример 1

Давайте попробуем получить текущую метку времени в запросе SELECT при преобразовании ее в формат даты и времени, как показано в запросе ниже. Термин «TZ» используется для возврата текущего часового пояса. На выходе отображается день, дата, время и часовой пояс.

>> SELECT to_char(CURRENT_TIMESTAMP, ‘Day Mon dd, yyyy HH12:MI AM (TZ)’);

Давайте попробуем получить текущую метку времени в запросе

Давайте изменим наш часовой пояс на «Европа / Рим».

>> SET TimeZone= ‘Europe/Rome’;

Давайте изменим наш часовой пояс на

Вы получите другое время, дату и часовой пояс, попробовав тот же запрос SELECT, как показано.

Вы получите другое время, дату и часовой пояс

Пример 2

Когда вы указываете часовой пояс в запросе SELECT, в выходных данных не будет отображаться текущий часовой пояс, как показано ниже.

>> SELECT to_char(CURRENT_TIMESTAMP AT TIME ZONE ‘Asia/Jerusalem’, ‘yyyy HH12:MI AM (TZ)‘);

Когда вы указываете часовой пояс в запросе SELECT

Пример 3

Давайте создадим быструю таблицу с именем «время» с двумя полями. Один относится к типу TIMESTAMP, а другой — к типу TIMESTAMPTZ.

>> CREATE TABLE time( without_timezone TIMESTAMP, with_timezone TIMESTAMPTZ);

Давайте создадим быструю таблицу с именем «время» с двумя полями

Теперь давайте проверим текущий часовой пояс, который мы использовали в нашей системе, используя команду SHOW в оболочке следующим образом:

>> SHOW timezone;

Теперь давайте проверим текущий часовой пояс

Теперь вам нужно вставить текущие значения даты и времени текущего часового пояса, который вы использовали на своем устройстве, в таблицу «время», используя функцию «now ()», как показано ниже.

>> INSERT INTO time VALUES( now(), now());

Теперь вам нужно вставить текущие значения даты и времени текущего часового пояса

Теперь вы можете получить запись из таблицы time, используя запрос SELECT, как показано ниже. Столбец без_времени показывает текущую дату и время без часового пояса, а столбец with_timezone показывает местное время с часовым поясом полностью.

>> SELECT * FROM time;

Теперь вы можете получить запись из таблицы time, используя запрос

Давайте изменим часовой пояс на «US / EASTERN» из запроса ниже.

>> SET SESSION TIME ZONE ‘US/EASTERN’;

Давайте изменим часовой пояс на

А теперь давайте еще раз проверим таблицу. Вы увидите, как значение столбца with_timezone было отображено в соответствии с часовым поясом «US / EASTERN», но значение «without_timezone» осталось таким же, как и раньше.

>> SELECT * FROM time;

А теперь давайте еще раз проверим таблицу

Пример 4

Приведем еще несколько примеров для метода to_char (). Предположим, что та же таблица «время» выше. Мы будем преобразовывать значение столбца without_timezone в строку, состоящую из часов, минут, секунд и часового пояса. Давайте попробуем запрос SELECT с использованием метода to_char () для преобразования значения столбца без_временной зоны. Мы упомянули «TZ» в нашем запросе, но он не покажет часовой пояс. Потому что значение столбца не состоит из часового пояса. Приведенная ниже команда дает результат:

>> SELECT to_char(without_timezone, ‘HH12:MI:SS TZ’) FROM time;

Приведем еще несколько примеров для метода to_char

Теперь давайте попробуем тот же запрос в случае другого столбца with_timezone. Чтобы преобразовать его в строку часов, минут, секунд и часового пояса. На этот раз он также покажет часовой пояс со временем, используя запрос ниже.

>> SELECT to_char(with_timezone, ‘HH12:MI:SS TZ’) FROM time;

Теперь давайте попробуем тот же запрос в случае другого столбца

Заключение

Поскольку проблема с / без часового пояса влияет не только на разбиение таблицы на разделы. Я рекомендую вам по возможности использовать тип часового пояса. Практически во всех руководствах обсуждается, как выполнять очистку в PostgreSQL в зависимости от времени, используя местные часы. Правильное решение, чувствительное к часовому поясу, немного усложняет работу, но может уберечь вас от неприятностей в будущем.

Оцените статью
bestprogrammer.ru
Добавить комментарий