En PostgreSQL, el make_timestamp()
La función le permite crear una marca de tiempo a partir de sus campos de año, mes, día, hora, minutos y segundos.
Sintaxis
La función tiene la siguiente sintaxis:
make_timestamp(year int, month int, day int, hour int, min int, sec double precision)
Donde year
, month
y day
son números enteros que representan el año, mes y día de la fecha, y hour
es la parte horaria, min
es la parte de los minutos, y sec
es la segunda parte.
La hora y los minutos se proporcionan como un número entero , los segundos se proporcionan como doble precisión .
El resultado se devuelve como una marca de tiempo . Más precisamente, se devuelve como hora sin zona horaria .
Ejemplo
Aquí hay un ejemplo básico para demostrarlo.
SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);
Resultado:
2020-10-25 09:30:17.12
Y podemos verificar el tipo de devolución con la siguiente consulta.
SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));
Resultado:
timestamp without time zone
El pg_typeof()
la función devuelve el tipo de datos de su argumento, por lo que pasé make_timestamp()
como argumento..
Fuera de rango
Si alguno de los argumentos está fuera del rango de valores posibles para su parte de fecha, obtendrá un error de "fuera de rango".
SELECT make_timestamp(2020, 13, 25, 9, 30, 17.12);
Resultado:
ERROR: date field value out of range: 2020-13-25
En este caso, el mes estaba fuera de rango, por lo que el mensaje explicaba que el valor del campo de fecha estaba fuera de rango.
Si solo el valor del campo de tiempo está fuera de rango, el error se redacta en consecuencia.
SELECT make_timestamp(2020, 10, 25, 25, 30, 17.12);
Resultado:
ERROR: time field value out of range: 25:30:17.12
Pasar cadenas como argumentos
La documentación de Postgres establece que los argumentos deben ser números enteros (y doble precisión en el caso de los seconds
argumento), pero pasar cadenas también funciona (probablemente porque se convierten implícitamente en números enteros), siempre que cada argumento esté dentro de su rango adecuado.
SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');
Resultado:
2020-12-25 10:30:17.12
Nuevamente podemos usar pg_type()
para comprobar el tipo de datos resultante.
SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));
Resultado:
timestamp without time zone
Sin embargo, aún debe asegurarse de que cada argumento sea válido una vez convertido a un número entero; de lo contrario, obtendrá un error.
SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));
Resultado:
ERROR: date field value out of range: 2020-13-25
Marca de tiempo con zona horaria
Para crear una marca de tiempo con zona horaria valor, use el make_timestamptz()
función.