В 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()
функция.