В PostgreSQL make_timestamp() функцията ви позволява да създадете клеймо за време от неговите полета за година, месец, ден, час, минути и секунди.
Синтаксис
Функцията има следния синтаксис:
make_timestamp(year int, month int, day int, hour int, min int, sec double precision)
Където year , month и day са цели числа, представляващи годината, месеца и деня на датата и hour е часовата част, min е частта за минутите и sec е секундната част.
Часът и минутите се предоставят като цяло число , секундите са предоставени като двойна точност .
Резултатът се връща като клеймо за време . По-точно, то се връща като час без часова зона .
Пример
Ето основен пример за демонстрация.
SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12); Резултат:
2020-10-25 09:30:17.12
И можем да проверим типа на връщането със следната заявка.
SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12)); Резултат:
timestamp without time zone
pg_typeof() функцията връща типа данни на своя аргумент и затова предадох make_timestamp() като аргумент...
Извън обхват
Ако някой от аргументите е извън диапазона на възможните стойности за неговата част от датата, ще получите грешка „извън диапазона“.
SELECT make_timestamp(2020, 13, 25, 9, 30, 17.12); Резултат:
ERROR: date field value out of range: 2020-13-25
В този случай месецът е бил извън обхвата и затова съобщението обяснява, че стойността на полето за дата е извън диапазона.
Ако само стойността на полето за време е извън диапазона, грешката се формулира съответно.
SELECT make_timestamp(2020, 10, 25, 25, 30, 17.12); Резултат:
ERROR: time field value out of range: 25:30:17.12
Подаване на низове като аргументи
Документацията на Postgres гласи, че аргументите трябва да са цели числа (и двойна точност в случай на seconds аргумент), но предаването на низове също работи (вероятно защото са имплицитно преобразувани в цели числа), стига всеки аргумент да е в правилния си диапазон.
SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12'); Резултат:
2020-12-25 10:30:17.12
Отново можем да използваме pg_type() за да проверите получения тип данни.
SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12')); Резултат:
timestamp without time zone
Все пак трябва да се уверите, че всеки аргумент ще бъде валиден, след като бъде преобразуван в цяло число, в противен случай ще получите грешка.
SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12')); Резултат:
ERROR: date field value out of range: 2020-13-25
Часова марка с часова зона
За да създадете клеймо за време с часова зона стойност, използвайте make_timestamptz() функция.