Tipo de datos DATETIMEOFFSET de SQL Server para fecha y hora con la zona horaria

Resumen: en este tutorial, aprenderás a usar el tipo de datos DATETIMEOFFSET
de SQL Server para manipular datos de tipo fecha y hora con la zona horaria.
Introducción al tipo de datos DATETIMEOFFSET
DATETIMEOFFSET
te permite manipular cualquier punto único en el tiempo, que es un valor de fecha y hora, junto con un desplazamiento que especifica cuánto difiere esa fecha y hora de UTC.
Sintaxis de DATETIMEOFFSET
La sintaxis de DATETIMEOFFSET
es la siguiente:
DATETIMEOFFSET [ (fractional seconds precision) ]
Para declarar una variable DATETIMEOFFSET
, utiliza la siguiente sintaxis:
DECLARE @dt DATETIMEOFFSET(7)
Para crear una columna en una tabla cuyo tipo de datos sea DATETIMEOFFSET
, utiliza la siguiente estructura:
CREATE TABLE table_name (
...,
column_name DATETIMEOFFSET(7)
...
);
El tipo de datos DATETIMEOFFSET
tiene un rango desde el 1 de enero del 1 hasta el 31 de diciembre de 9999. La hora va desde las 00:00:00 hasta las 23:59:59.9999999.
Formatos literales
Los formatos literales de DATETIMEOFFSET
son los siguientes:
YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]
Por ejemplo:
2020-12-12 11:30:30.12345
Formato ISO:
YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z
Ejemplo ISO:
2020-12-12 19:30:30.12345Z.
Especificar zona horaria
Para un valor de fecha y hora, un desplazamiento de zona horaria especifica el desplazamiento de zona desde UTC. Un desplazamiento de zona horaria se representa como [+|-] hh:mm:
- hh son dos dígitos que van de 00 a 14, lo que representa el número de horas en el desplazamiento de la zona horaria.
- mm son dos dígitos que van de 00 a 59, lo que representa la cantidad de minutos adicionales en la compensación de la zona horaria.
- +(más) o -(menos) especifica si el desplazamiento de la zona horaria se suma o se resta de la hora UTC para devolver la hora local.
El rango válido de un desplazamiento de zona horaria es de -14:00 a +14:00
Ejemplos de DATETIMEOFFSET
Primero, crea una tabla llamada messages, que tiene una columna DATETIMEOFFSET
:
CREATE TABLE messages(
id INT PRIMARY KEY IDENTITY,
message VARCHAR(255) NOT NULL,
created_at DATETIMEOFFSET NOT NULL
);
En segundo lugar, inserta una nueva fila con un valor DATETIMEOFFSET
en la tabla de messages:
INSERT INTO messages(message,created_at)
VALUES('DATETIMEOFFSET demo',
CAST('2019-02-28 01:45:00.0000000 -08:00' AS DATETIMEOFFSET));
Tercero, consulta los datos de la tabla de mensajes y use AT TIME ZONE
para convertir el valor DATETIMEOFFSET
almacenado a la zona horaria 'SE Asia Standard Time'
.
SELECT
id,
message,
created_at
AS 'Pacific Standard Time'
created_at AT TIME ZONE 'SE Asia Standard Time'
AS 'SE Asia Standard Time',
FROM
messages;
Resultado:
id | message | Pacific Standard Time | SE Asia Standard Time |
---|---|---|---|
1 | DATETIMEOFFSET demo | 2019-02-28 01:45:00.0000000 -08:00 | 2019-02-28 16:45:00.0000000 +07:00 |
En este tutorial, has aprendido a usar el tipo de datos DATETIMEOFFSET
para manipular el valor DATETIMEOFFSET
.