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

Cómo funciona make_time() en PostgreSQL

En PostgreSQL, el make_time() La función le permite crear una hora a partir de sus campos de hora, minutos y segundos.

Sintaxis

La función tiene la siguiente sintaxis:

make_time(hour int, min int, sec double precision)

Donde 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 hora . Más precisamente, se devuelve como hora sin zona horaria .

Ejemplo

Aquí hay un ejemplo básico para demostrarlo.

SELECT make_time(7, 45, 15.08);

Resultado:

07:45:15.08

Y podemos verificar el tipo de devolución con la siguiente consulta.

SELECT pg_typeof(make_time(7, 45, 15.08));

Resultado:

time without time zone

El pg_typeof() la función devuelve el tipo de datos de su argumento, por lo que pasé make_time() 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_time(25, 45, 15.08);

Resultado:

ERROR: time field value out of range: 25:45:15.08

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_time('7', '45', '15.08');

Resultado:

07:45:15.08

Nuevamente podemos usar pg_type() para comprobar el tipo de datos resultante.

SELECT pg_typeof(make_time('7', '45', '15.08'));

Resultado:

time 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 make_time('25', '45', '15.08');

Resultado:

ERROR: time field value out of range: 25:45:15.08