SWITCHOFFSET (Transact-SQL)
Retourne une valeur datetimeoffset du décalage de fuseau horaire stocké qui est remplacée par un nouveau décalage de fuseau horaire spécifié.
Pour obtenir une vue d'ensemble de tous les types de données et fonctions de date et d'heure Transact-SQL, consultez Types de données et fonctions de date et d'heure (Transact-SQL).
Conventions de la syntaxe Transact-SQL
Syntaxe
SWITCHOFFSET ( DATETIMEOFFSET, time_zone )
Arguments
DATETIMEOFFSET
Expression qui peut être résolue en une valeur datetimeoffset(n).time_zone
Chaîne de caractères au format [+|-]TZH:TZM ou entier signé (de minutes) qui représente le décalage de fuseau horaire, et qui est supposée être réglée et prendre en charge l'heure d'été.
Type de retour
datetimeoffset avec la précision de fraction de l'argument DATETIMEOFFSET.
Notes
Utilisez SWITCHOFFSET pour sélectionner une valeur datetimeoffset dans un décalage de fuseau horaire qui est différent du décalage de fuseau horaire stocké à l'origine. SWITCHOFFSET ne met pas à jour la valeur time_zone stockée.
SWITCHOFFSET peut être utilisé pour mettre à jour une colonne datetimeoffset.
L'utilisation de SWITCHOFFSET avec la fonction GETDATE() peut ralentir l'exécution de la requête car l'optimiseur de requête est incapable d'obtenir les estimations de cardinalité précises pour la valeur GETDATE. Nous vous recommandons de précalculer la valeur GETDATE, puis de spécifier cette valeur dans la requête, comme indiqué dans l'exemple suivant. Par ailleurs, utilisez l'indicateur de requête OPTION (RECOMPILE) pour obliger l'optimiseur de requête à recompiler un plan de requête lors de la prochaine exécution de la même requête. L'optimiseur disposera alors d'estimations de cardinalité précises pour GETDATE() et générera un plan de requête plus performant.
DECLARE @dt datetimeoffset = switchoffset (CONVERT(datetimeoffset, GETDATE()), '-04:00');
SELECT * FROM t
WHERE c1 > @dt OPTION (RECOMPILE);
Exemples
L'exemple suivant utilise SWITCHOFFSET pour afficher un décalage de fuseau horaire différent de la valeur stockée dans la base de données.
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