选择语句MSSQL

时间:2016-07-05 07:18:16

标签: sql sql-server

这是我的功能 FirstDayInQtr

这是sql查询

SELECT @day =  DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0)

谁能解释这句话

3 个答案:

答案 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