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

Cómo funciona make_date() en PostgreSQL

En PostgreSQL, el make_date() La función le permite crear una fecha a partir de sus campos separados de año, mes y día.

Cada parte de la fecha se proporciona como un entero y el resultado se devuelve como una fecha .

Sintaxis

La función tiene la siguiente sintaxis:

make_date(year int, month int, day int)

Donde year , month y day son números enteros que representan el año, el mes y el día de la fecha.

Ejemplo

Aquí hay un ejemplo básico para demostrarlo.

SELECT make_date(2020, 07, 25);

Resultado:

2020-07-25

Y podemos comprobar que devuelve un tipo de dato de fecha con la siguiente consulta.

SELECT pg_typeof(make_date(2020, 07, 25));

Resultado:

date

El pg_typeof() la función devuelve el tipo de datos de su argumento, por lo que pasé make_date() 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_date(2020, 17, 25);

Resultado:

ERROR: date field value out of range: 2020-17-25

Aquí está de nuevo con un mes de 00:

SELECT make_date(2020, 00, 25);

Resultado:

date field value out of range: 2020-00-25

Pasar cadenas como argumentos

La documentación de Postgres establece que los argumentos deben ser números enteros, pero pasar cadenas parece funcionar (probablemente porque se convierten implícitamente en números enteros), siempre que cada argumento esté dentro de su rango adecuado.

SELECT make_date('2020', '07', '25');

Resultado:

2020-07-25

Nuevamente podemos usar pg_type() para comprobar que el resultado es de hecho una fecha tipo de datos.

SELECT pg_typeof(make_date('2020', '07', '25'));

Resultado:

date

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 como el siguiente.

SELECT make_date(2020, 'July', 25);

Resultado:

ERROR: invalid input syntax for type integer: "July"
LINE 1: SELECT make_date(2020, 'July', 25);