Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL从时区名称获取小时偏移量_Sql Server_Tsql_Timezone_Offset - Fatal编程技术网

Sql server T-SQL从时区名称获取小时偏移量

Sql server T-SQL从时区名称获取小时偏移量,sql-server,tsql,timezone,offset,Sql Server,Tsql,Timezone,Offset,在DB In fieldTimeZoneId中,我有如下字符串值: GMT Standard Time W. Europe Standard Time Romance Standard Time FLE Standard Time 我需要用这些字符串值以小时为单位获得int值偏移量,即 GMT Standard Time | 0 W. Europe Standard Time | 1 Romance Standard Time | 1 FLE Standard Time

在DB In field
TimeZoneId
中,我有如下字符串值:

GMT Standard Time
W. Europe Standard Time
Romance Standard Time
FLE Standard Time
我需要用这些字符串值以小时为单位获得int值偏移量,即

GMT Standard Time       | 0
W. Europe Standard Time | 1
Romance Standard Time   | 1
FLE Standard Time       | 2
所有字符串值:

我只需要使用T-SQL。

一些东西:

  • 您提供的链接已严重过时,仅适用于Windows Embedded POS 1.1。更准确的Windows时区列表可以在注册表中的
    HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TimeZones
    中找到,也可以在.NET中的
    TimeZoneInfo.GetSystemTimeZones()
    中找到,或者在命令提示符下调用
    tzutil/L

  • 您要求的是无效的,因为时区不能用单个数字表示。时区包括对日光节约时间偏移的更改,以及每年的历史更改。请参见中的“时区!=偏移”

  • 处理时区通常最好在应用程序层而不是数据库中完成。只有少数场景需要在DB层使用它。如果您不一定需要在数据库中执行此操作,那么就不要这样做

  • 与其他数据库平台不同,SQL Server没有内置的时区转换功能

  • 要添加时区转换功能,您需要维护时区数据表,并编写转换函数以使用该数据。数据经常变化,因此保持最新是很重要的

  • 幸运的是,我为你做了大部分工作。你可以使用我的项目。它目前适用于IANA/TZDB时区(如
    美国/纽约
    ,或
    欧洲/伦敦
    ),而不是Windows时区,但它可以。您可以等待此功能,也可以等待


我认为SQL Server中没有这样的东西。我认为这些信息来自Windows操作系统。您必须在数据库中创建这样一个表,或者编写一个.Net函数来完成这项工作。这些字符串是如何进入数据库的?找到执行此操作的进程,并对其进行修改以同时添加偏移量。您需要一个字符串值表来添加偏移量。还请注意,您需要以分钟为单位的偏移量,而不是以小时为单位的偏移量,因为有些地方的分钟数为奇数。目前,所有地方似乎都接近四分之一小时,但谁能说这是否会一直如此呢?由于DST和其他原因,偏移量会发生变化。不要使用偏移来表示时区。见下面我的答案。