В PostgreSQL, make_timestamptz()
функцията ви позволява да създадете клеймо за време с часова зона от полетата за година, месец, ден, час, минути и секунди, както и поле за часова зона по избор.
Синтаксис
Функцията има следния синтаксис:
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])
Където year
, month
и day
са цели числа, представляващи годината, месеца и деня на датата и hour
е часовата част, min
е частта за минутите и sec
е секундната част.
Часът и минутите се предоставят като цяло число , секундите са предоставени като двойна точност .
Незадължителната timezone
аргументът е за часовата зона. Ако не е посочено, се използва текущата часова зона.
Резултатът се връща като час с часова зона .
Пример
Ето основен пример за демонстрация.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);
Резултат:
1999-03-14 10:35:12.15+10
В този случай не предоставих часова зона, така че използва текущата часова зона.
Можем да проверим типа на връщането със следната заявка.
SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));
Резултат:
timestamp with time zone
pg_typeof()
функцията връща типа данни на своя аргумент и затова предадох make_timestamptz()
като аргумент.
Посочете часова зона
В този пример изрично предоставям часова зона.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');
Резултат:
1999-03-14 16:35:12.15+10
Ето още един пример, но с различни стойности на часовата зона.
\x
SELECT
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');
Резултат (с помощта на вертикален изход):
make_timestamptz | 1999-12-31 23:31:00+10 make_timestamptz | 2000-01-01 00:31:00+10 make_timestamptz | 2000-01-01 15:01:00+10 make_timestamptz | 2000-01-01 09:01:00+10 make_timestamptz | 2000-01-01 11:01:00+10 make_timestamptz | 1999-12-31 21:01:00+10
В този пример използвах \x
за да активирате разширен дисплей (известен също като „вертикален изход“), за да направите резултатите по-лесни за четене.
Въведете \x
превключва разширения дисплей (т.е. активира и деактивира го).
Вижте Връщане на списък с часови зони, поддържани от PostgreSQL, за да получите списък с валидни часови зони.
Извън обхват
Ако някой от аргументите е извън диапазона на възможните стойности за неговата част от датата, ще получите грешка „извън диапазона“.
SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);
Резултат:
ERROR: date field value out of range: 1999-03-32
В този случай денят е бил 32, което е извън обхвата и затова съобщението обяснява, че стойността на полето за дата е извън диапазона.
Ако само стойността на полето за време е извън диапазона, грешката се формулира съответно.
SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);
Резултат:
ERROR: time field value out of range: 10:61:12.15
В този случай minutes
аргументът е 61, което е извън обхвата.
Часово клеймо без часова зона
За да създадете времева марка без часова зона, използвайте make_timestamp()
функция.