PostgreSQL

PostgreSQL To_char Часовник с часова зона

PostgreSQL To_char Часовник с часова зона

Методите за форматиране PostgreSQL включват полезна колекция от инструменти за превод на различни типове данни (дата / час, цяло число, с плаваща запетая, числови) във форматирани низове и превеждане на форматирани низове обратно в уникални типове данни. Оттук нататък понякога трябва да конвертираме и часови зони. Времето винаги се записва в UTC в PostgreSQL времеви марки за формата на данни за часовата зона, но се показва по подразбиране в браузъра, сесията или местното време на потребителя. Една от неговите помощни функции, на които разчитаме, е методът TO_CHAR (), който позволява времеви марки и времеви марки с часовата зона, наред с други форми, и ви позволява да подреждате парчетата от времева марка, както ви харесва. Клеймо за време, двойна точност, продължителността, число или числова стойност могат да бъдат преобразувани в низ с помощта на метода PostgreSQL TO_CHAR (). Изглежда, че има метод с един аргумент, 'to_timestamp', който взема аргумент с двойна точност и трансформира от Unix епоха в клеймо, използвайки часовата зона. Ще ви покажем как да направите нещо по този въпрос в тази публикация. Нека първо разгледаме по-отблизо to_char ().

Синтаксис:

Общият синтаксис за функцията to_char () е както следва:

>> To_char (израз, формат);

Методът TO_CHAR () в PostgreSQL се нуждае от две твърдения:

В PostgreSQL са налични два типа времеви клейма:

И тук е проблемът: стандартният формуляр за данни за времеви клеймо не знае за часовите зони. И това е необходимост от SQL (как би могло да се случи, изглежда отвъд). Нашият основен фокус е да научим to_Char () времева марка с часова зона. За да започнете работа по PostgreSQL с функцията 'to_char ()', отворете черупката на командния ред на PostgreSQL и доставете стойностите на параметрите за задължителния сървър, база данни, номер на порт, потребителско име и парола. Оставете тези съображения незапълнени, ако трябва да използвате параметрите по подразбиране, както е показано на изображението по-долу.

To_char () За String Number

За да разберете концепцията на функцията to_Char (), използвайки клеймо с времева зона, първо трябва да изпробвате примера с номера на низове. Така че имаме число '1897' и ще го преобразуваме в '9999.99 'формат, използвайки заявката по-долу. От изхода по-долу можете да видите, че номерът на низа е преобразуван в посочения формат.

>> ИЗБЕРЕТЕ to_char (1897, '9999.99 ');

Ето още една илюстрация за преобразуване. Този път преобразувахме число в различен формат, като в него има „запетая“. Символът „G“ ще се използва за задаване на запетая.

>> ИЗБЕРЕТЕ to_char (367.78, '9G999.99 ');

To_char Клеймо за време с TimeZone

За да разберем Timestamp с концепцията за часовата зона, нека разгледаме един прост пример. Да предположим, че сте в „Пакистан“, така че вашата часова зона трябва да е „PKT“ точно сега.

Пример 01:

Нека се опитаме да извлечем текущия клеймо в заявката SELECT, докато го конвертираме във формат Дата-час, както е показано в заявката по-долу. Терминът „TZ“ се използва за връщане на текущата часова зона. Резултатът показва деня, датата, часа и часовата зона.

>> ИЗБЕРЕТЕ to_char (CURRENT_TIMESTAMP, 'Day Mon dd, гггг HH12: MI AM (TZ)');

Нека променим часовата си зона на „Европа / Рим“.

>> SET TimeZone = 'Европа / Рим';

Ще получите различен час, дата и часова зона, когато опитате същата заявка SELECT, както е показано.

Пример 02:

Когато посочите TimeZone в заявката SELECT, тогава изходът няма да показва текущата часова зона според изхода по-долу.

>> ИЗБЕРЕТЕ to_char (CURRENT_TIMESTAMP В ЧАСОВАТА ЗОНА 'Азия / Йерусалим', 'yyyy HH12: MI AM (TZ)');

Пример 03:

Нека създадем бърза таблица с име „време“ с две полета. Единият е от типа TIMESTAMP, а другият е от типа TIMESTAMPTZ.

>> СЪЗДАЙТЕ ТАБЛИЦА време (без_часова зона TIMESTAMP, with_timezone TIMESTAMPTZ);

Сега нека проверим текущата часова зона, която използваме в нашата система, като използваме командата SHOW в черупката, както следва:

>> ПОКАЖЕТЕ часовата зона;

Сега трябва да вмъкнете текущите стойности на датата и часа на текущата часова зона, които сте използвали на вашето устройство в таблицата „време“, като използвате функцията „сега ()“, както е показано по-долу.

>> ВЪВЕДЕТЕ В СТОЙНОСТИ на времето (сега (), сега ());

Сега можете да извлечете записа от таблицата 'time', като използвате заявката SELECT, както е показано по-долу. Колоната 'without_timezone' показва текущата дата и час без часова зона, докато колоната 'with_timezone' показва местното време с часовата зона изцяло.

>> ИЗБЕРЕТЕ * ОТ време;

Нека променим часовата зона на „US / EASTERN“ от заявката по-долу.

>> ЗАДАВАНЕ НА ЧАСОВАТА ЗОНА ЗА СЕСИЯ 'US / EASTERN';

Сега да проверим отново таблицата. Ще видите как стойността на колоната 'with_timezone' е показана според часовата зона 'US / EASTERN', но стойността на 'without_timezone' е същата като преди.

>> ИЗБЕРЕТЕ * ОТ време;

Пример 04:

Нека имаме още няколко примера за метода to_char (). Да приемем същото по-горе таблица „време“. Ще преобразуваме стойността на колоната 'without_timezone' в низ, съставен от часове, минути, секунди и часова зона. Нека опитаме SELECT заявката, използвайки метода to_char () за преобразуване на стойността на колоната 'without_timezone'. В нашата заявка споменахме „TZ“, но тя няма да показва часовата зона, тъй като стойността на колоната не се състои от часовата зона. Посочената по-долу команда дава резултата:

>> ИЗБЕРЕТЕ to_char (без_часова зона, 'HH12: MI: SS TZ') ОТ време;

Сега нека опитаме същата заявка в случая на другата колона 'with_timezone', за да я преобразуваме в низ от часове, минути, секунди и часова зона. Този път ще покаже часовата зона с времето, като използва и заявката по-долу.

>> ИЗБЕРЕТЕ to_char (with_timezone, 'HH12: MI: SS TZ') ОТ времето;

Заключение:

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

Топ 10 игри за игра на Ubuntu
Платформата на Windows е една от доминиращите платформи за игри поради огромния процент игри, които се развиват днес, за да поддържат Windows. Може ли...
5 най-добри аркадни игри за Linux
В днешно време компютрите са сериозни машини, използвани за игри. Ако не можете да получите новия висок резултат, ще разберете какво имам предвид. В т...
Битка за Уеснот 1.13.6 Разработка освободена
Битка за Уеснот 1.13.6, издаден миналия месец, е шестата версия за разработка в 1.13.x серия и предоставя редица подобрения, най-вече на потребителски...