sql-server - 如何使用数据在 GMT 中的本地时间查询每日计数
问题描述
我需要一个 sql server 查询来获取给定月份的每日行数。我的时间戳存储在 GMT 中,但我的月份需要由客户在本地时间定义。这段代码似乎可以工作,但是太讨厌了,即使使用 EntryDate 作为索引,随着表的增长,它也可能会变得很慢。有没有更简单的方法?客户将位于不同的时区,因此我无法创建额外的列。在此示例中,月/年/时区是硬编码的,但会通过参数传递给执行 SQL 的 C# 代码。
我正在使用 Microsoft SQL Azure (RTM) - 12. 以小时为单位传递偏移量并使用它来偏移日期会更快吗?
select CreateDate=DATEPART(DAY, EntryDate AT TIME ZONE 'Greenwich Standard Time' AT TIME ZONE 'Central Standard Time'), Items=count(1)
from TestTable1
where year(EntryDate AT TIME ZONE 'Greenwich Standard Time' AT TIME ZONE 'Central Standard Time') = 2018
and month(EntryDate AT TIME ZONE 'Central Standard Time' AT TIME ZONE 'Greenwich Standard Time') = 9
group by DATEPART(DAY, EntryDate AT TIME ZONE 'Greenwich Standard Time' AT TIME ZONE 'Central Standard Time')
order by 1
任何想法表示赞赏!
解决方案
以下是转换为当地时间的方法。它不包括任何行计数逻辑。
DECLARE @V_UTC_DATETIME DATETIME
SET @V_UTC_DATETIME='2012-12-03T08:48:52'
SELECT @V_UTC_DATETIME AS UTC_DATETIME,
DATEADD(hh,((DATEDIFF(ss,@V_UTC_DATETIME,GETDATE())-DATEDIFF(ss,
@V_UTC_DATETIME,GETUTCDATE()))/3600),
@V_UTC_DATETIME) AS LOCAL_DATETIME
推荐阅读
- linux - 遗留的交叉编译功能意外消失了——我怎么知道发生了什么?
- css - css 显示屏幕尺寸是否为 1200 或更大或之间
- mongodb - 无法在 Ubuntu 上的 Golang 中连接到 Mongo Cloud mongodb 数据库
- android - 错误:程序类型已经存在:com.fasterxml.jackson.core.Base64Variant
- javascript - 为什么在 Office.js 中使用 context.sync 时会一直循环?
- recursion - erlang 的递归不起作用。获取函数子句匹配错误
- connection - AttributeError:“NoneType”对象在提供视频文件期间没有属性“split”
- java - 在来自 OpenJDK 11 的源代码上运行 DocumentationTool
- javascript - 试图在onClick上添加一个列表项删除线,但它破坏了我的提交按钮
- encryption - 使用 openssl C API 加密的文件无法通过命令行 openssl 解密