Sql server (T-SQL)夏时制是在最后一个小时发生的吗?

Sql server (T-SQL)夏时制是在最后一个小时发生的吗?,sql-server,tsql,sql-server-2017,Sql Server,Tsql,Sql Server 2017,我有一个使用表分区的过程,每个分区是1小时,我需要在归档数据时处理夏令时翻转 例如,上个周末它从1:59:59运行到1:00:00,所以分区代码第二次在凌晨1:05运行时什么也不会发生——午夜时间已经被关闭 然而,当春天来临时,时间从凌晨1:59到凌晨3:00,因此当作业在3:05运行时,它将在凌晨2点关闭。。。。将凌晨1点的数据保留在原始表格中 从理论上讲,我可以只查找包含数据的最旧而不是当前的分区,并翻转一个分区键是默认的getdate约束,但我想知道是否有某种方法可以在时区使用以确定夏令时

我有一个使用表分区的过程,每个分区是1小时,我需要在归档数据时处理夏令时翻转

例如,上个周末它从1:59:59运行到1:00:00,所以分区代码第二次在凌晨1:05运行时什么也不会发生——午夜时间已经被关闭

然而,当春天来临时,时间从凌晨1:59到凌晨3:00,因此当作业在3:05运行时,它将在凌晨2点关闭。。。。将凌晨1点的数据保留在原始表格中

从理论上讲,我可以只查找包含数据的最旧而不是当前的分区,并翻转一个分区键是默认的getdate约束,但我想知道是否有某种方法可以在时区使用以确定夏令时已经发生,这样我们就可以使用不同的代码来处理仍然存在的较旧时间


谢谢。

也许是这样的。基本上,将您当前的getdate与任何观察到的时区一起使用。然后使用DATEPART tz并比较当前和之前的数据

无论服务器时区是什么,使用AT时区都将获得该时区中特定日期时间值的偏移量

为了与之前进行比较,我认为您需要使用2小时,1小时用于开关,1小时用于您要检查的距离

看看这个:

DECLARE @BeforeDate DATETIME = '2018-11-04 1:59' --Before the change
DECLARE @AfterDate DATETIME = '2018-11-04 3:00' --After the change

--use can use AT TIME ZONE with DATEPART tz which tells you offset in minutes
--I'm in central, any should work for any that observe the time change
--Your offset is different because of the change.

SELECT DATEPART(tz, @BeforeDate AT TIME ZONE 'Central Standard Time')
SELECT DATEPART(tz, @AfterDate AT TIME ZONE 'Central Standard Time')

--using the above you could possibly compare current offset to 2 hours prior to see if they changed.  2 hours, 1 for the switch and 1 for how far back you want to compare.
DECLARE @CurrentDate DATETIME = '2018-11-04 3:00'  --"simulate" getdate() as of the time change

DECLARE @PriorOffSet INT = (SELECT DATEPART(tz, DATEADD(HOUR, -2, @CurrentDate) AT TIME ZONE 'Central Standard Time')) --You'd have to subtract 2 hours to account for the hour shift and the hour back you want to check.
DECLARE @CurrentOffset INT = (SELECT DATEPART(tz, @CurrentDate AT TIME ZONE 'Central Standard Time'))

SELECT @PriorOffSet, @CurrentOffset

IF @PriorOffSet <> @CurrentOffset
    SELECT 'Time changed in the last hour'
ELSE
    SELECT 'No time change in the last hour'

上周末从1:59:59到1:00:00,不是吗?也许我的时区和你的不一样?凌晨2点是什么意思?在这种情况下是什么?Flip是什么意思?现在已经很晚了,所以我可能只是在努力理解一些显而易见的事情。如果是这样的话,我很抱歉。这不是很清楚。但一个人的时区在夏时制反转时不会改变。如果他们在PST,他们仍然在PST。当地时间在秋天向后跳一个小时,在春天向前跳一个小时。我不确定你的问题是什么。是否按小时对表进行分区?可以使用DATEPARTTZ、@DateTimeOffsetValue获取偏移量。我打赌你可以得到两个值在时区的DateTimeOffset,然后比较偏移量进行更改,不幸的是,这需要你事先知道服务器的时区。也许有一种方法可以将UTC标准化并检查差异,这样您就不需要知道服务器时区。简而言之,使用UTC。没有时区,没有DTS,没有那种混乱。问题解决了。@jnevil为清晰起见已将其修复。我们把开关称为翻转。我意识到你仍然在同一个时区,但我认为有某种方式可以区分,因为有些州,在某些情况下,城市的行为与其他州不同。