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

Cómo funciona make_timestamptz() en PostgreSQL

En PostgreSQL, el make_timestamptz() La función le permite crear una marca de tiempo con zona horaria desde sus campos de año, mes, día, hora, minutos y segundos, así como un campo de zona horaria opcional.

Sintaxis

La función tiene la siguiente sintaxis:

make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])

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 .

La timezone opcional argumento es para la zona horaria. Si no se especifica, se utiliza la zona horaria actual.

El resultado se devuelve como una hora con zona horaria .

Ejemplo

Aquí hay un ejemplo básico para demostrarlo.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);

Resultado:

1999-03-14 10:35:12.15+10

En este caso, no proporcioné una zona horaria, por lo que usé la zona horaria actual.

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

SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));

Resultado:

timestamp with time zone

El pg_typeof() la función devuelve el tipo de datos de su argumento, por lo que pasé make_timestamptz() como argumento.

Especifique una zona horaria

En este ejemplo, proporciono explícitamente una zona horaria.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');

Resultado:

1999-03-14 16:35:12.15+10

Aquí hay otro ejemplo, pero con varios valores de zona horaria.

\x
SELECT 
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');

Resultado (usando salida vertical):

make_timestamptz | 1999-12-31 23:31:00+10
make_timestamptz | 2000-01-01 00:31:00+10
make_timestamptz | 2000-01-01 15:01:00+10
make_timestamptz | 2000-01-01 09:01:00+10
make_timestamptz | 2000-01-01 11:01:00+10
make_timestamptz | 1999-12-31 21:01:00+10

En este ejemplo usé \x para habilitar la visualización ampliada (también conocida como "salida vertical") para que los resultados sean más fáciles de leer.

Ingresando \x alterna la visualización ampliada (es decir, la habilita y deshabilita).

Consulte Devolver una lista de zonas horarias admitidas por PostgreSQL para obtener una lista de zonas horarias válidas.

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_timestamptz(1999, 03, 32, 10, 35, 12.15);

Resultado:

ERROR: date field value out of range: 1999-03-32

En este caso, el día era 32, que está 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_timestamptz(1999, 03, 30, 10, 61, 12.15);

Resultado:

ERROR: time field value out of range: 10:61:12.15

En este caso los minutes el argumento es 61, que está fuera de rango.

Marca de tiempo sin zona horaria

Para crear una marca de tiempo sin una zona horaria, use make_timestamp() función.