替换日期时间的年份

Mik*_*ike 5 sql t-sql sql-server datetime

我有一个带有列(dateDT)的表,格式化为datetime,并且@selYear我的Select中的year()的变量输入格式为int.

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

我尝试了以下但是这会返回错误的日期/年份:

CONVERT(DATETIME, (@selYear + MONTH(dateDT) + DAY(dateDT))) AS dateDT,
Run Code Online (Sandbox Code Playgroud)

例:

@selYear = 2014
dateDT = 2010-05-02 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

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

dateDT = 2014-05-02 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

got*_*tqn 5

使用DATEADD函数的解决方案:

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


SELECT DATEADD(YEAR,@selYear - YEAR(@dateDT),@dateDT)
Run Code Online (Sandbox Code Playgroud)

这是当前年份较小的示例:

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


SELECT DATEADD(YEAR,@selYear - YEAR(@dateDT),@dateDT)
Run Code Online (Sandbox Code Playgroud)

  • 是的,它也可以是`INT`,是的,你可以使用'DATEADD`函数和第二个参数的负值. (2认同)