sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo funciona make_timestamp() en PostgreSQL

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.