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.