鉴于特定的DateTime
,并且仅使用SQL,我如何确定夏令时是否会在当天生效?这纯粹是为了本地"使用,所以我不需要担心它在不同的环境或语言环境中工作,只需要我自己的SQL Server 2008R2服务器。
所以,例如,
declare @myDate datetime='2 Jun 2014 14:00'
然后以某种方式评估@myDate
将返回一个结果,表明"是的,这是在DST",其中为
declare @myDate datetime='2 Dec 2014 14:00'
...将是"不,这不是DST"。
指定的日期时间仅限于工作时间(上午8点至晚上8点),因此我并不太关心“#34;之间的价值”。 DST和非DST。我在英国,在UTC和UTC + 1之间。
答案 0 :(得分:0)
似乎在这里回答:
Get Time zones in SQL Server 2008 R2
基本上,您需要将Olson时区数据库或其某些子集加载到SQL Server数据库中,然后才能使用SQL访问它。
答案 1 :(得分:0)
我拼凑了以下代码,这使得(英国)假设DST在3月的最后一个星期日开始,并在10月的最后一个星期日结束。它对我的要求非常具体,但似乎可以胜任 - 如果有人知道更优雅的解决方案......
declare @myDate datetime='2 Jun 2014'
-- Declare October in this year
declare @october datetime=DATEADD(month,9, DATEADD(yy, DATEDIFF(yy,0,@myDate), 0))
-- Declare March in this year
declare @march datetime=DATEADD(month,3, DATEADD(yy, DATEDIFF(yy,0,@myDate), 0))
-- Find last Sunday in March
declare @DSTStart datetime=DATEADD(dd,
-DATEPART(WEEKDAY,
DATEADD(dd, -DAY(DATEADD(mm, 1, @march)),
DATEADD(mm, 1, @march))) + 1,
DATEADD(dd, -DAY(DATEADD(mm, 1, @march)), DATEADD(mm, 1, @march)))
-- Find last Sunday in October
declare @DSTEnd datetime= DATEADD(dd,
-DATEPART(WEEKDAY,
DATEADD(dd, -DAY(DATEADD(mm, 1, @october)),
DATEADD(mm, 1, @october))) + 1,
DATEADD(dd, -DAY(DATEADD(mm, 1, @october)), DATEADD(mm, 1, @october)))
if (@mydate BETWEEN @DSTStart and @DSTEnd) print 'DST'