代码之家  ›  专栏  ›  技术社区  ›  DeannaD

如何使用localtime查询每日计数,其中数据以GMT为单位

  •  0
  • DeannaD  · 技术社区  · 7 年前

    我需要一个sql server查询来获取给定月份的每日行数。我的时间戳存储在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 回复  |  直到 7 年前
        1
  •  0
  •   Mike Ubezzi    7 年前

    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