我目前正在编写一个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:00
到01: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日期和时间