Sql server 使用sql server计算X-mas日
我正在使用sql server 2012 我得到这个查询来计算x-mas日,但无法得到逻辑:Sql server 使用sql server计算X-mas日,sql-server,Sql Server,我正在使用sql server 2012 我得到这个查询来计算x-mas日,但无法得到逻辑: 选择dateadd(yy,datediff(yy,-1,getdate()),-7) datediff(yy,-1,getdate())给出115 但是,这是如何让我在12月25日到达的呢 请解释..DATEDIFF接受三个参数,第一个参数将定义您要查找的差异,第二个和第三个参数是startdate和enddate 在你的例子中,你给了-1作为起始日期,这只是 select cast(-1 as dat
选择dateadd(yy,datediff(yy,-1,getdate()),-7)
datediff(yy,-1,getdate())给出115
但是,这是如何让我在12月25日到达的呢
请解释..DATEDIFF接受三个参数,第一个参数将定义您要查找的差异,第二个和第三个参数是startdate和enddate 在你的例子中,你给了-1作为起始日期,这只是
select cast(-1 as datetime) --1899-12-31 00:00:00.000
select getdate() --2014-12-25 23:22:36.493
select(2014-1899)——115
是您的年差
在顶部,还有一个dateadd函数,它再次接受三个参数,其中第二个参数是number,第三个参数是date
您给出了-7,这相当于选择cast(-7作为日期时间)--1899-12-25 00:00:00.000
注:自sqlserver开始日期(1900-01-01 00:00:00.000)起7天=>1899-12-25 00:00:00.000
其中年份部分为1899年,我们在此基础上增加115因此
选择1899+115
=2014,其收益率如下
选择dateadd(yy,115,'1899-12-25 00:00:00.000')--2014-12-25 00:00:00.000这里的键是
dateadd函数中的-7
,该函数提供带有'25 dec'的日期
在Sql Server中,日期时间数据类型的第一个日期是1900-01-01 00:00:00.000
,因此-7
将是1899-12-25 00:00:00.000
在此基础上,您将添加一些x
年(115),因此您将获得2014-12-25 00:00:00.000
示例
CREATE TABLE #temmp(dates DATETIME)
INSERT INTO #temmp
VALUES (0),(1),(2),(3),(-7)
Select * from #temmp
结果:
dates
1900-01-01 00:00:00.000
1900-01-02 00:00:00.000
1900-01-03 00:00:00.000
1900-01-04 00:00:00.000
1899-12-25 00:00:00.000
最后一行日期是1899-12-25 00:00:00.000
(用于DateAdd函数
),因此从那里您将添加一些x
年(115),这将为您提供一个日期为2014-12-25 00:00:00.000
,在sql server中,开始日期始终取为1900
因此在datediff函数中
:
select datediff(yy,-1,getdate()) = 115 --> 1900-1 = 1899 till 2014 = 115
日期添加函数中的:
select dateadd(yy,115,-7)= Jan 2015 -7 days = 25-12-2014