sql >> Base de Datos >  >> RDS >> Sqlserver

Obtenga la zona horaria actual del servidor en SQL Server (T-SQL)

Microsoft introdujo el CURRENT_TIMEZONE() función en SQL Server 2019 para devolver la zona horaria del servidor.

Más específicamente, esta función “devuelve el nombre de la zona horaria observada por un servidor o una instancia”.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

SELECT CURRENT_TIMEZONE();

Resultado:

(UTC) Coordinated Universal Time

En este caso, la zona horaria de mi instancia de SQL Server es UTC.

Puedo ver esto cuando ejecuto funciones como SYSDATETIMEOFFSET() .

SELECT SYSDATETIMEOFFSET();

Resultado:

2020-04-01 00:14:44.0470785 +00:00

UTC tiene una compensación de zona horaria de +00:00 (sin compensación), y esto se refleja cuando devuelvo la fecha y la hora del sistema.

Versiones anteriores de SQL Server

Si ejecuto CURRENT_TIMEZONE() contra mi instancia de SQL Server 2017, esto es lo que obtengo.

SELECT CURRENT_TIMEZONE();

Resultado:

Msg 195, Level 15, State 10, Line 1
'CURRENT_TIMEZONE' is not a recognized built-in function name.

Incluso descargué el contenedor Docker más reciente con SQL Server 2017 para Linux para verificar esto, pero sigo recibiendo este error.

También revisé otras instalaciones de SQL Server 2017 pero con el mismo resultado.

En la sección de comentarios de su documentación en línea para esta función, Microsoft ha insinuado que CURRENT_TIMEZONE() será portado a versiones anteriores de SQL Server, pero esto no parece haber sucedido hasta el momento de escribir este artículo.

Mientras tanto, puedes probar el siguiente código.

DECLARE @TimeZone VARCHAR(50)
EXEC MASTER.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
'TimeZoneKeyName',@TimeZone OUT
SELECT @TimeZone

Resultado:

UTC

Lo ejecuté en la misma instancia de SQL Server 2017 que no es compatible con CURRENT_TIMEZONE() , y funcionó bien.

Obviamente, su resultado dependerá de dónde se encuentre su servidor (o al menos, para qué zona horaria se haya configurado). Esto es lo que obtengo si ejecuto esta instrucción en otro servidor:

W. Europe Standard Time

SQL Server también tiene una vista del sistema que le permite devolver una lista de zonas horarias admitidas, que podría usar para cotejar sus resultados aquí.