En SQL Server, el TODATETIMEOFFSET()
La función fue diseñada específicamente para devolver un datetimeoffset valor de un datetime2 valor.
Dado el hecho de que datetime2 el tipo de datos en realidad no admite compensaciones de zona horaria y datetimeoffset debe contener el desplazamiento, el TODATETIMEOFFSET()
La función le permite especificar una compensación de zona horaria para usar.
Este artículo proporciona algunos ejemplos para demostrarlo.
Uso básico
Aquí hay un ejemplo del uso típico de TODATETIMEOFFSET()
función.
DECLARE @dt datetime2 = '2020-12-20 17:33:59.8900000';
SELECT
@dt AS [datetime2],
TODATETIMEOFFSET(@dt, '+07:00') AS [datetimeoffset];
Resultado (usando salida vertical):
datetime2 | 2020-12-20 17:33:59.8900000 datetimeoffset | 2020-12-20 17:33:59.8900000 +07:00
En este caso devuelvo el datetime2 original value y el datetimeoffset resultante valor.
El resultado es que la fecha/hora original es la misma, excepto que se ha agregado el desplazamiento de zona horaria especificado.
El rango es de +14 a -14 (en horas). La expresión se interpreta en hora local para la zona horaria especificada.
Especifique la diferencia de zona horaria en minutos
Como alternativa, puede especificar el desplazamiento de la zona horaria en minutos. He aquí un ejemplo.
DECLARE @dt datetime2 = '2020-12-20 17:33:59.8900000';
SELECT
@dt AS [datetime2],
TODATETIMEOFFSET(@dt, +120) AS [datetimeoffset];
Resultado (usando salida vertical):
datetime2 | 2020-12-20 17:33:59.8900000 datetimeoffset | 2020-12-20 17:33:59.8900000 +02:00
En este caso especifiqué +120 minutos, que es lo mismo que dos horas. Entonces, el resultado fue una compensación de zona horaria de +02:00 (es decir, más dos horas).
También tenga en cuenta que cuando proporciona el desplazamiento de la zona horaria en minutos, lo proporciona como un valor entero. Por otro lado, cuando lo proporciona en horas, debe especificarlo como una cadena.
Consulte Convertir una fecha en otra zona horaria para ver ejemplos de cómo hacerlo.