启用夏令时时如何在T-SQL中开始一天的开始和结束?

时间:2018-11-23 02:15:56

标签: sql-server tsql dst

我目前正在使用SQL Server脚本,在该脚本中,我们每天收集过去'n'天的汇总数据。为了做到这一点,我们创建了一个临时表,其中包含过去“ n”天的所有天的开始时间和结束时间。代码如下。

DECLARE @Tbl TABLE (Begin DATETIME, End DATETIME)

DECLARE @i INT = 1
DECLARE @begin DATETIME = DATEADD(DD, DATEDIFF(DD, 1, GETDATE()), 0)
DECLARE @end DATETIME = DATEADD(DD, 1, @begin)

WHILE @i <= @n
    INSERT INTO @Tbl
    SELECT @begin, @end

    SET @end = @begin
    SET @begin = DATEADD(DAY, -1, @end)
    SET @i = @i + 1
END

我们通过调用一个内置函数将这些日期转换为UTC,该函数可以按预期正确执行操作,但是由于这不是有效的本地时间,因此会November 4th 2018 00:00:00引发错误。

上述代码的问题在于它生成的日期是开始日期的第0小时,结束日期是第0小时。尽管由于夏令时,其中一些日期可能不切实际。

例如,如果考虑巴西时区,则夏令时于11月4日在00:00:0001:00:00启用,这使得日期2018-11-04 00:00:00不正确地转换为UTC。

是否有任何已知的函数可以用来传递日期并获取当地时间的有效开始时间和当地时间的有效结束时间?

2 个答案:

答案 0 :(得分:0)

GETUTCDATE()

返回UTC日期和时间

答案 1 :(得分:0)

对于本地时间开始日期和结束日期,请使用以下代码

DECLARE @startDate DATETIME, @endDate DATETIME
SET @startDate=DATEFROMPARTS(YEAR(getdate()),MONTH(getdate()),DAY(getdate()))
SET @endDate=getdate()
SELECT @startDate,@endDate

对于UTC时间,请在上面的代码中将getdate()函数替换为getutcdate()