sql - 在 SQL 中使用时区

标签 sql sharepoint-2010

我需要获取一个 SQL 查询来以 Mmm dd yyyy hh:mm AM/PM 格式输出日期时间字段中的日期。到目前为止我能想到的最好方法是:

SELECT Left(
           Convert(
               nvarchar(30),
               SWITCHOFFSET(
                   CAST(datetime1 as datetimeoffset),
                   '-05:00'
               ),
               0
           ),
           LEN(
               Convert(
                   nvarchar(30),
                   SWITCHOFFSET(
                       CAST(datetime1 as datetimeoffset),
                       '-05:00'
                   )
               )
           )-11
       )

但是,a)它很丑!我觉得这应该比那更简单; b) 我认为当夏令时回来时必须更改我的查询。

源数据是共享点日历​​,因此我不能简单地将数据类型更改为 datetimeoffset。

有什么想法吗?

谢谢, 史蒂夫

最佳答案

作为一般原则,您不应该使用 SQL 将数据格式化为适合前端的内容。您应该返回 DateTime 类型,并使用格式上的代码来更改它。如果 future 要求支持 DD/MM/YYY 怎么办?您将需要一个单独的查询。最好让前端对其进行格式化。

考虑到这一点,在数据库中存储 2 条数据。 1) DateTime 作为 UTC 值 2) 当前用户的时区(非偏移)

您存储时区而不是偏移量的原因是因为 DST 涉及的所有规则。例如,夏令时开始结束的日期并不是一成不变的。它们每年针对一个国家/地区设置,但该时间表可能会发生变化,这不是需要更新代码的糟糕原因(除非您正在编写时区库。)

一旦获得这两条数据,就可以检索日期和时区,并在服务器中构造一个新对象,该对象允许您将数据库中的时间转换为本地时间。

关于sql - 在 SQL 中使用时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479147/

相关文章:

command-line - 暂停和恢复 robocopy

sharepoint - 沙盒解决方案似乎严重受损

sql - 在 Rails 应用程序中集成 Oracle 数据库

java - getConnection() 中抛出空指针异常

sql - Oracle 时间戳差异大于 X 小时/天/月

sql - 使用动态 sql 的替代方法

javascript - JQuery 尝试进行 Ajax 调用时出错

sql - 仅选择与其他行相同的值

ssl - 使用 Fiddler2 跟踪 HTTPS SharePoint 调用

javascript - 使用 Javascript 代码查找当前 SharePoint 用户