这是我的功能 FirstDayInQtr
这是sql查询
SELECT @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0)
谁能解释这句话
答案 0 :(得分:1)
我相信这会清除您的不确定因素:https://stackoverflow.com/a/3945396/6492765
基本上,SELECT是一种为变量设置值的T-SQL方法,神奇之处在于从连接或其他选择概念中直接选择变量。通过将1个值分配给1个变量,它与SET没有区别,在您的情况下,它将是:
SET @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0)
答案 1 :(得分:0)
您将当前季度的第一天分配给变量@day
答案 2 :(得分:0)
DATEADD()
函数添加或减去日期的指定时间间隔。
语法: DATEADD(datepart,number,date)
qq = quarter,
yy = Year
在你的问题中,日期字段在datepart语法中代表为0或-1, SQL服务器将0关联为1900-01-01 00:00:00.000 和-1作为0 1899-12-31 00:00:00.000之前的1天
所以
select dateadd(qq,466,'1900-01-01 00:00:00.000') is the same as
SELECT DATEADD(qq, DATEDIFF(qq ,0, GETDATE()),0)
OR
SET @InsertDate = GETDATE()
SELECT DATEADD(qq, DATEDIFF(qq ,0, @InsertDate),0)
现在,466是由函数的datediff(qq,0,GETDATE())
部分派生的。根据日历年,在1900-01-01 00:00:00.000之间有466个季度
现在。
所以@day
如果您的2016-07-01 00:00:00.000
值为@InsertDate
,则会收到2016-07-05 00:00:00.000
。