No SQL Server, você pode usar o
TODATETIMEOFFSET()
função para retornar um deslocamento de data e hora valor que é traduzido de um datetime2 expressão. Ele aceita dois argumentos; a data e o deslocamento que você deseja aplicar a essa data. Abaixo estão exemplos de uso.
Sintaxe
A sintaxe de
TODATETIMEOFFSET()
fica assim:TODATETIMEOFFSET ( expression , time_zone )
Onde
expression
é uma expressão que resolve para um datetime2 value e time_zone
é o fuso horário que você deseja aplicar a essa expressão (data). Você pode fornecer o fuso horário em minutos ou horas. Se você fornecer em minutos, use um número inteiro (por exemplo,
-120
), caso contrário, para fornecê-lo em horas, use uma string (por exemplo, '+04.00'
). O intervalo para o fuso horário é de +14 a -14 (horas). Além disso, a data fornecida é interpretada na hora local para o fuso horário especificado.
Exemplo 1
Aqui está um exemplo básico de uso:
SELECT TODATETIMEOFFSET( '2112-01-01 00:00:00', '+08:00' ) AS Result;
Resultado:
Result ---------------------------------- 2112-01-01 00:00:00.0000000 +08:00
Exemplo 2 - Valor Negativo
Este é o mesmo que o exemplo anterior, exceto que eu uso um valor negativo:
SELECT TODATETIMEOFFSET( '2112-01-01 00:00:00', '-08:00' ) AS Result;
Resultado:
Result ---------------------------------- 2112-01-01 00:00:00.0000000 -08:00
Exemplo 3 – Usando uma variável datetime2
Neste exemplo, defini explicitamente uma variável com um datetime2 valor e, em seguida, aplique
TODATETIMEOFFSET()
para esse valor e compare os valores:DECLARE @date datetime2 = '2112-01-01 00:00:00.0000000'; SELECT @date AS 'Original Date', TODATETIMEOFFSET( @date, '+08:00' ) AS '+08:00';
Resultado:
Original Date +08:00 --------------------------- ---------------------------------- 2112-01-01 00:00:00.0000000 2112-01-01 00:00:00.0000000 +08:00
Como podemos ver neste exemplo (e nos anteriores), o valor de data original não possui nenhum datetime informações de deslocamento (porque é um datetime2 value), mas depois de executá-lo através do
TODATETIMEOFFSET()
função, acabamos com um datetimeoffset tipo de dados. Exemplo 4 – Usando uma variável datetimeoffset
Isso é semelhante ao exemplo anterior, exceto que a data original é definida como um deslocamento de data e hora valor:
DECLARE @date datetimeoffset = '2112-01-01 00:00:00.0000000 +04:00'; SELECT @date AS 'Original Date', TODATETIMEOFFSET( @date, '+08:00' ) AS '+08:00';
Resultado:
Original Date +08:00 ---------------------------------- ---------------------------------- 2112-01-01 00:00:00.0000000 +04:00 2112-01-01 00:00:00.0000000 +08:00
Exemplo 5 – Usando a data/hora atual
Neste exemplo, passo o
SYSDATETIMEOFFSET()
função como a expressão de data. Esta função gera a data/hora atual do computador que está executando a instância do SQL Server:SELECT SYSDATETIMEOFFSET() AS 'Current Date', TODATETIMEOFFSET( SYSDATETIMEOFFSET(), '+08:00' ) AS '+08:00';
Resultado:
Current Date +08:00 ---------------------------------- ---------------------------------- 2018-06-06 08:50:57.8382284 +10:00 2018-06-06 08:50:57.8382284 +08:00
Exemplo 6 - Fornecendo o deslocamento de fuso horário como um inteiro
Conforme mencionado, você também pode fornecer o deslocamento de fuso horário como um número inteiro em vez de uma string:
SELECT TODATETIMEOFFSET( '2112-01-01 00:00:00', -180 ) AS Result;
Resultado:
Result ---------------------------------- 2112-01-01 00:00:00.0000000 -03:00