小编典典

替换日期时间中的年份

sql

我有一个带有列(dateDT)的表,格式为日期时间,@selYear在我的Select中有一个年份()的变量输入,格式为int。

如何使用变量输入替换表中日期中的年份,并以datetime格式(在Select中)返回结果?

我尝试了以下操作,但是返回错误的日期/年份:

CONVERT(DATETIME, (@selYear + MONTH(dateDT) + DAY(dateDT))) AS dateDT,

例子:

@selYear = 2014
dateDT = 2010-05-02 00:00:00.000

在这种情况下,我的结果应该是:

dateDT = 2014-05-02 00:00:00.000

阅读 360

收藏
2021-03-23

共1个答案

小编典典

使用DATEADD函数的解决方案:

DECLARE @selYear VARCHAR(4) = 2014
DECLARE @dateDT DATETIME = '2010-05-02 00:00:00.000'


SELECT DATEADD(YEAR,@selYear - YEAR(@dateDT),@dateDT)

这是一个比当前年份小的年份的示例:

DECLARE @selYear INT = 2009
DECLARE @dateDT DATETIME = '2010-05-02 00:00:00.000'


SELECT DATEADD(YEAR,@selYear - YEAR(@dateDT),@dateDT)
2021-03-23