SQL选择medicalExamDate并添加年份和月末
这将得到体检的日期。但是,我需要在体检到期时返回,这是一年后的日期,也是一个月的最后一天。例如,如果我在2012年1月12日接受体检,体检将于2013年1月31日到期 medicalDate是“日期”类型 如何在SQL中实现这一点?基本上,我想让它在2013年1月31日返回,以便在2012年1月的任何时候进行体检 如果没有,我想我可以用VB来做。我对学习如何使用VB更感兴趣,因为我不打算在我的余生中使用VB 编辑: 这将是本月的最后一天SQL选择medicalExamDate并添加年份和月末,sql,sql-server,date,Sql,Sql Server,Date,这将得到体检的日期。但是,我需要在体检到期时返回,这是一年后的日期,也是一个月的最后一天。例如,如果我在2012年1月12日接受体检,体检将于2013年1月31日到期 medicalDate是“日期”类型 如何在SQL中实现这一点?基本上,我想让它在2013年1月31日返回,以便在2012年1月的任何时候进行体检 如果没有,我想我可以用VB来做。我对学习如何使用VB更感兴趣,因为我不打算在我的余生中使用VB 编辑: 这将是本月的最后一天 SELECT medicalDate FROM Pilot
SELECT medicalDate
FROM PilotMedical
WHERE pilotID = '1'
现在正在寻找如何增加一年到这一点
--Last Day of Any Month and Year
DECLARE @dtDate DATETIME
SET @dtDate = '8/18/2007'
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dtDate)+1,0))
LastDay_AnyMonth
ResultSet:
LastDay_AnyMonth
———————–
2007-08-31 23:59:59.000
输出
2013-01-31 00:00:00.000这说明了一种方法:
SELECT DATEADD(dd, -DAY(DATEADD(m,1,'2012-01-12')), DATEADD(m,13,'2012-01-12')) expirationDate
步骤1:在下一年的同一个月创建一个新日期,但在1号
步骤2:添加一个月
第三步:减去一天EDIT:dang,它不加一年,我在下面更新了我的答案
DECLARE @OrigDate datetime
DECLARE @NewDate datetime
SET @OrigDate = '1/12/2012'
SET @NewDate = DATEADD(Day, -1, DATEADD(Month, 1, Cast(CAST(Month(@OrigDate) as varchar) + '/1/' + CAST((Year(@OrigDate)+1) as varchar) as datetime)))