sql - 确定 T-SQL 中的时区偏移

标签 sql sql-server sql-server-2005 timezone

我的数据库应用程序将部署在不同时区的多个站点。

我需要一个 T-SQL 函数来确定当年 1 月 1 日午夜的 UTC 时间戳,以进行 YTD 计算。所有数据都存储在 UTC 时间戳中。

例如,芝加哥采用 UTC-6 夏令时 (DST),如果该函数在 2008 年芝加哥的任何时间运行,则需要返回“2008-01-01 06:00:00”。如果明年在纽约(GMT-5 + DST)运行,则需要返回 '2009-01-01 05:00:00'。

我可以从YEAR(GETDATE())获取当前年份。我想我可以在 GETDATE()GETUTCDATE() 之间执行 DATEDIFF 来确定偏移量,但结果取决于查询是否运行是否在 DST 期间。我不知道有任何内置的 T-SQL 函数用于确定偏移量或当前时间是否为 DST?

有人能用 T-SQL 解决这个问题吗?我可以对其进行硬编码或将其存储在表中,但我不想这样做。我认为这是在 SQL Server 2005 中使用 CLR 集成的完美情况。我只是想知道是否有一个我不知道的 T-SQL 解决方案?

最佳答案

查看之前的问题和答案以获取相关信息:

Effectively Converting dates between UTC and Local (ie. PST) time in SQL 2005

(总而言之,您确实需要在 Sql Server 2005 中构建时区和 DST 表。在 Sql Server 的下一版本中,我们将获得一些有关时区的帮助。)

关于sql - 确定 T-SQL 中的时区偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/180638/

相关文章:

sql - 如何使用 rollup 返回 varchar 字符串而不是 null?

sql-server - 如何在 SQL 存储过程中将 varbinary 转换为 GUID?

SQL Server 2005 恢复挂起

SQL Server - "sys.functions"在哪里?

sql - 为什么一个简单的 T-SQL UDF 函数会使代码执行速度慢 3 倍

mysql - 测试多个用户是否在同一组中

mysql - 在 MySQL 的 JOIN 上设置 LIMIT

php - 根据日期和用户 ID 检查记录是否存在,如果不存在则创建它,如果存在则更新它 - 同时添加值而不是替换它们

sql-server - 数据库项目未运行部署后脚本

sql-server - Azure SQL,聚集列存储索引, "TOP"性能