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



我目前正在编写一个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小时和结束日期的第零小时。尽管由于夏令时的原因,其中一些日期可能不切实际。

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

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

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

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

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

GEUTCDATE((

返回UTC日期和时间

最新更新