【发布时间】:2014-04-15 06:51:55
【问题描述】:
SQL Server 使用 'datediff' 函数返回的标准时间是多少?
datediff(ss, '1/1/1970', current_timestamp)
现在是格林威治标准时间吗?
要求:
在 CST 和 DST 时间戳中返回时间戳的用户定义函数取决于当前时间(CST 或夏令时)。
在 CST 时区,即“该区的 CST 时间比格林威治标准时间晚 6 小时”
(datediff(ss, '1/1/1970', current_timestamp) + 21600)
在夏令时 (DST) 期间,该区域的时间比格林威治标准时间晚 5 小时
(datediff(ss, '1/1/1970', current_timestamp) + 18000)
谁能帮我为上述要求创建一个用户定义的函数。
感谢和问候, 文卡特
【问题讨论】:
-
通常更好的是,一旦涉及时区,只在数据库中存储和处理 UTC 值,并将任何区域摆弄到系统中直接从用户那里获取输入或呈现输出的部分给他们。
-
对,这里的问题是我们正在从 sql server 端(后端)更新列数据。 last_update_date = (datediff(ss, '1/1/1970', current_timestamp) + 18000) 或 (datediff(ss, '1/1/1970', current_timestamp) + 21600) 取决于当前时区。我们始终是 CST 时区。如果是夏令时,我们必须使用 last_update_date = (datediff(ss, '1/1/1970', current_timestamp) + 18000) 进行更新。如果是正常 CST last_update_date = (datediff(ss, '1/1/1970', current_timestamp) + 21600)。帮我创建一个用户定义的函数。
-
明确您的条款。时间戳不是日期。 current_timestamp 的数据类型是什么。 DATEDIFF 返回一个 int。 msdn.microsoft.com/en-US/library/ms189794(v=SQL.105).aspx
-
我只需要一个像这样的用户定义函数 Create function myfucntion () { if (TImezone = 'DST') select (datediff(ss, '1/1/1970', current_timestamp) + 18000 ); else (datediff(ss, '1/1/1970', current_timestamp) + 21600) }
标签: sql-server tsql sql-server-2012