替换日期时间的年份

时间:2014-04-28 19:56:00

标签: sql sql-server tsql datetime

我有一个带有列(dateDT)的表格,格式为datetime,而我的Select中的年份(@selYear)的变量输入格式为int。

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

我尝试过以下操作,但这会返回错误的日期/年:

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

3 个答案:

答案 0 :(得分:5)

使用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)

答案 1 :(得分:3)

您可以在sqlserver 2012中使用DATEFROMPARTS

DECLARE @selYear int = 2014
DECLARE @dateDT datetime = '2010-05-02'
SELECT DATEFROMPARTS(@selYear, 
                     DATEPART(m, @dateDT), 
                     DATEPART(d, @dateDT))

答案 2 :(得分:2)

SELECT REPLACE(dateDT, DATEPART(year, dateDT), @selYear)