Методы форматирования PostgreSQL включают полезный набор инструментов для преобразования различных типов данных (дата / время, целые числа, числа с плавающей запятой, числовые) в форматированные строки и преобразования форматированных строк обратно в уникальные типы данных. Впредь иногда нам нужно также конвертировать часовые пояса. Время всегда записывается в формате UTC в метках времени PostgreSQL для формы данных часового пояса, но по умолчанию отображается в браузере, сеансе или локальном времени пользователя. Одна из его вспомогательных функций, на которую мы привыкли полагаться, - это метод TO_CHAR (), который, среди прочего, позволяет использовать метки времени и метки времени с часовым поясом, а также позволяет упорядочивать части метки времени так, как вам нравится. Метка времени, двойная точность, продолжительность, число или числовое значение могут быть преобразованы в строку с помощью метода PostgreSQL TO_CHAR (). Кажется, существует метод с одним аргументом, to_timestamp, который принимает аргумент с двойной точностью и преобразует эпоху Unix в метку времени с использованием часового пояса. В этом посте мы покажем вам, как что-то с этим сделать. Давайте сначала подробнее рассмотрим to_char ().
Синтаксис:
Общий синтаксис функции to_char () следующий:
>> To_char (выражение, формат);Метод TO_CHAR () в PostgreSQL требует двух утверждений:
- Выражение: Метка времени, продолжительность, число, двойная точность или числовое значение, которое преобразовано в строку в соответствии с определенным форматом, могут использоваться как выражения.
- Формат: Стиль, в котором будет отображаться строка вывода. Формат может отличаться в зависимости от типа выражения, e.грамм., номер, дата.
В PostgreSQL доступны два типа временных меток:
- Отметка времени: без часового пояса.
- Отметка времени: с часовым поясом.
И вот в чем проблема: стандартная форма данных временной метки не учитывает часовые пояса. И это необходимость SQL (как это могло произойти, кажется, за гранью). Наша основная цель - изучить метку времени to_Char () с часовым поясом. Чтобы начать работу с PostgreSQL с функцией to_char (), откройте оболочку командной строки PostgreSQL и введите значения параметров для обязательного сервера, базы данных, номера порта, имени пользователя и пароля. Оставьте эти соображения незаполненными, если вам нужно использовать параметры по умолчанию, как показано на изображении ниже.
To_char () для строкового числа
Чтобы понять концепцию функции to_Char (), использующей временную метку с часовым поясом, вы должны сначала попробовать пример строковых чисел. Итак, у нас есть число «1897», и мы будем преобразовывать его в «9999».99 'с использованием следующего запроса. Из вывода ниже видно, что номер строки был преобразован в указанный формат.
>> ВЫБРАТЬ to_char (1897, '9999.99 ');
Вот еще одна иллюстрация для преобразования. На этот раз мы преобразовали число в другой формат, добавив в него запятую. Символ 'G' будет использоваться для указания запятой.
>> ВЫБРАТЬ to_char (367.78, '9G999.99 ');
To_char Timestamp с часовым поясом
Чтобы понять концепцию отметки времени с часовым поясом, давайте рассмотрим простой пример. Предположим, вы находитесь в «Пакистане», поэтому сейчас ваш часовой пояс должен быть «PKT».
Пример 01:
Давайте попробуем получить текущую метку времени в запросе SELECT при преобразовании ее в формат даты и времени, как показано в запросе ниже. Термин "TZ" используется для возврата текущего часового пояса. На выходе отображается день, дата, время и часовой пояс.
>> SELECT to_char (CURRENT_TIMESTAMP, 'Day Mon dd, yyyy HH12: MI AM (TZ)');
Давайте изменим наш часовой пояс на "Европа / Рим".
>> УСТАНОВИТЬ Часовой пояс = 'Европа / Рим';
Вы получите другое время, дату и часовой пояс, попробовав тот же запрос SELECT, как показано.
Пример 02:
Когда вы указываете часовой пояс в запросе SELECT, тогда в выходных данных не будет отображаться текущий часовой пояс, как показано ниже.
>> ВЫБЕРИТЕ to_char (CURRENT_TIMESTAMP В ЧАСОВОЙ ЗОНЕ 'Азия / Иерусалим', 'гггг HH12: MI AM (TZ)');
Пример 03:
Давайте создадим быструю таблицу с именем "время" с двумя полями. Один относится к типу TIMESTAMP, а другой - к типу TIMESTAMPTZ.
>> СОЗДАТЬ ТАБЛИЦУ время (без_времени TIMESTAMP, with_timezone TIMESTAMPTZ);
Теперь давайте проверим текущий часовой пояс, который мы использовали в нашей системе, используя команду SHOW в оболочке следующим образом:
>> ПОКАЗАТЬ часовой пояс;
Теперь вам нужно вставить текущие значения даты и времени текущего часового пояса, который вы использовали на своем устройстве, в таблицу «время», используя функцию «сейчас ()», как показано ниже.
>> ВСТАВИТЬ В ЗНАЧЕНИЯ времени (сейчас (), сейчас ());
Теперь вы можете получить запись из таблицы time, используя запрос SELECT, как показано ниже. Столбец without_timezone показывает текущую дату и время без часового пояса, а столбец with_timezone показывает местное время с часовым поясом полностью.
>> ВЫБРАТЬ * ИЗ ВРЕМЕНИ;
Давайте изменим часовой пояс на «US / EASTERN» из запроса ниже.
>> УСТАНОВИТЬ ЧАСОВОЙ ПОЯС СЕССИИ «США / ВОСТОК»;
Теперь давайте еще раз проверим таблицу. Вы увидите, как значение столбца with_timezone было отображено в соответствии с часовым поясом «US / EASTERN», но значение «without_timezone» осталось таким же, как и раньше.
>> ВЫБРАТЬ * ИЗ ВРЕМЕНИ;
Пример 04:
Приведем еще несколько примеров для метода to_char (). Предположим, что та же таблица "время" выше. Мы будем преобразовывать значение столбца without_timezone в строку, состоящую из часов, минут, секунд и часового пояса. Давайте попробуем запрос SELECT с использованием метода to_char () для преобразования значения столбца без_временной зоны. Мы упомянули "TZ" в нашем запросе, но он не покажет часовой пояс, потому что значение столбца не состоит из часового пояса. Приведенная ниже команда дает результат:
>> ВЫБРАТЬ to_char (без_времени, 'HH12: MI: SS TZ') FROM time;
Теперь давайте попробуем тот же запрос в случае другого столбца with_timezone, чтобы преобразовать его в строку часов, минут, секунд и часового пояса. На этот раз он также покажет часовой пояс со временем, используя запрос ниже.
>> ВЫБРАТЬ to_char (with_timezone, 'HH12: MI: SS TZ') FROM time;
Заключение:
Поскольку проблема с / без часового пояса влияет не только на разбиение таблицы, я рекомендую вам использовать тип часового пояса, когда это практически возможно. Почти во всех руководствах обсуждается, как выполнять очистку в зависимости от времени в PostgreSQL с использованием местных часов. Правильное решение, чувствительное к часовому поясу, немного усложняет работу, но может уберечь вас от неприятностей в будущем.