我需要一个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
任何想法表示赞赏!
答案 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