Compartilhar via


SWITCHOFFSET (Transact-SQL)

Retorna um valor datetimeoffset que é alterado do deslocamento de fuso horário armazenado para um novo deslocamento especificado.

Para obter uma visão geral de todos os tipos de dados e funções de data e hora do Transact-SQL, consulte tipos de dados e funções de data e hora (Transact-SQL).

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

SWITCHOFFSET ( DATETIMEOFFSET, time_zone )

Argumentos

  • DATETIMEOFFSET
    É uma expressão que pode ser resolvida em um valor de datetimeoffset(n).

  • time_zone
    É uma cadeia de caracteres no formato [+|-]TZH:TZM ou um inteiro assinado (de minutos) que representa o deslocamento de fuso horário e que se pressupõe estar ajustado e reconhecer horário de verão.

Tipo de retorno

datetimeoffset com a precisão fracionária do argumento DATETIMEOFFSET.

Comentários

Use SWITCHOFFSET para selecionar um valor de datetimeoffset em um deslocamento de fuso horário diferente do deslocamento armazenado originalmente. SWITCHOFFSET não atualiza o valor de time_zone armazenado.

SWITCHOFFSET pode ser usado para atualizar uma coluna datetimeoffset.

Usar SWITCHOFFSET com a função GETDATE() pode fazer com que a consulta seja executada de forma mais lenta porque o otimizador de consulta não é capaz de obter estimativas de cardinalidade para o valor de GETDATE. É recomendável que você pré-calcule o valor de GETDATE e depois especifique esse valor na consulta, como mostrado no exemplo a seguir. Além disso, use a dica de consulta OPTION (RECOMPILE) para forçar o otimizador de consulta a recompilar um plano de consulta da próxima vez que a mesma consulta for executada. O otimizador terá, então, estimativas de cardinalidade precisas para GETDATE() e produzirá um plano de consulta mais eficiente.

DECLARE @dt datetimeoffset = switchoffset (CONVERT(datetimeoffset, GETDATE()), '-04:00'); 
SELECT * FROM t  
WHERE c1 > @dt OPTION (RECOMPILE);

Exemplos

O exemplo a seguir usa SWITCHOFFSET para exibir um deslocamento de fuso horário diferente do valor armazenado no banco de dados.

CREATE TABLE dbo.test 
    (
    ColDatetimeoffset datetimeoffset
    );
GO
INSERT INTO dbo.test 
VALUES ('1998-09-20 7:45:50.71345 -5:00');
GO
SELECT SWITCHOFFSET (ColDatetimeoffset, '-08:00') 
FROM dbo.test;
GO
--Returns: 1998-09-20 04:45:50.7134500 -08:00
SELECT ColDatetimeoffset
FROM dbo.test;
--Returns: 1998-09-20 07:45:50.7134500 -05:00

Consulte também

Referência

CAST e CONVERT (Transact-SQL)