如何使用GMT中数据的本地时间查询每日计数

时间:2018-10-01 20:15:28

标签: sql-server azure-sql-database

我需要一个sql服务器查询来获取给定月份的每日行数。我的时间戳存储在GMT中,但是我的月份需要由客户在本地时间定义。这段代码似乎可以正常工作,但是令人讨厌,即使表以EntryDate作为索引,它也会随着表的增长而变慢。有更容易的方法吗?客户将处于不同的时区,因此我无法创建其他列。在本示例中,月/年/时区是硬编码的,但是会通过参数传递给C#代码以执行SQL。

我正在使用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

任何想法表示赞赏!

1 个答案:

答案 0 :(得分:0)

这是您转换为当地时间的方式。它不包含任何行计数逻辑。

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