我正在处理一个小型查询,并想要一些格式化日期的帮助
场合
我接受付款日期,根据该日期,我将截止日期设定为今年或下一年的3月31日。因此,如果付款是在1月份,则到期日是当年3月31日,如果是在8月份进行,则是在明年3月31日。 这是我的疑问。
BEGIN
IF DATEPART(MONTH,@paydate) BETWEEN 1 and 3
UPDATE usrBio
SET ExpDate=DATEPART(YEAR,GETDATE())+'-31'+'-03'
WHERE IDnum =@IDnum
ELSE IF
DATEPART(MONTH,@paydate) BETWEEN 4 and 12
UPDATE usrBio
SET ExpDate=DATEPART(YEAR,GETDATE()+1)+'-31'+'-03'
WHERE IDnum =@IDnum
END
我遇到的问题是我不确定如何设置月份和日期而不是连接到年份字符串,它从年份日期减去,我的结果是1905-06-07 00:00:00.000
在那里我期待2017-31-03
。
答案 0 :(得分:3)
如果是2012+,请考虑 DateFromParts()
示例1
2018-03-31
退货
Declare @PayDate date = '2017-03-31'
Select DateFromParts(Year(@PayDate)+IIF(Month(@PayDate)>3,1,0),3,31)
示例2
2017-03-31
<强>返回强>
Select DateAdd(YEAR,case when Month(@PayDate)>3 then 1 else 0 end,str(Year(@PayDate),4)+'-03-31')
**
编辑 - 2008年
**
insert into attendance (timestamp, status, studentID, scheduleID)
SELECT NOW(), 0, ss.studentID, ss.scheduleID
FROM schedule_students ss
LEFT JOIN attendance a
ON ss.scheduleID = a.scheduleID
AND ss.studentID = a.studentID
AND a.status = 1
WHERE ss.scheduleID = '6004'
AND a.studentID IS NULL
答案 1 :(得分:2)
问题是您尝试将年份作为数字而不是字符串
SELECT CAST( DATEPART(YEAR,GETDATE()+1)
AS varchar(5)) +'-03'+'-31'
你可以像这样优化你的逻辑
UPDATE usrBio
SET ExpDate = CAST( CASE WHEN DATEPART(MONTH,@paydate) BETWEEN 1 and 3
THEN DATEPART(YEAR,GETDATE())
WHEN DATEPART(MONTH,@paydate) BETWEEN 4 and 12
THEN DATEPART(YEAR,GETDATE()+1)
END AS varchar(4)
) +'-03'+'-31'