SELECT medicalDate
FROM PilotMedical
WHERE pilotID = '1'
这将获得体检日期。但是,我需要在此体检结束时返回,即自该日期起一年,以及该月的最后一天。例如,如果我在2012年1月12日接受体检,它将于2013年1月31日到期。
medicalDate是一种“约会”类型。
我怎样才能在SQL中执行此操作?基本上我想让它在2012年1月的任何时间返回2013年1月31日进行体检。
如果没有,我想我可以在VB中完成。我对学习如何在VB中学习更感兴趣,因为我不打算在余生中使用VB
编辑:
这将获得该月的最后一天
--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
现在正在寻找如何为此添加一年
答案 0 :(得分:1)
这证明了一种方法:
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)))
步骤1:在明年同一月创建一个新日期,但是在第一天。
第2步:添加一个月
第3步:减去一天
答案 1 :(得分:0)
SELECT DATEADD(dd, -DAY(DATEADD(m,1,'2012-01-12')), DATEADD(m,13,'2012-01-12')) expirationDate
输出
2013-01-31 00:00:00.000