每天,我必须更新表中的DateTime列。该字段的格式应为“ 2019-04-30 00:00:00.000”,应始终为“ NextYear-04-30 00:00:00.000”。如何编写此功能?
由于我今天正在运行此更新语句,即在2018年,因此应为“ 2019-04-30 00:00:00.000”,如果我在2019年运行更新语句,则应为“ 2020-04-30 00” :00:00.000'
For Example: This query is giving me '2018-04-30 00:00:00.000'
Select CONVERT(datetime, CONVERT(varchar(20),DATEPART(year, getdate())) + '-04-30')
谢谢
答案 0 :(得分:1)
使用相同的查询,您只需封装一个DATEADD
函数即可增加1年:
Select DATEADD(YEAR, 1, CONVERT(datetime, CONVERT(varchar(20),DATEPART(year, getdate())) + '-04-30'))
产生输出:
2019-04-30 00:00:00.000
答案 1 :(得分:0)
您应该使用DATEADD()函数。
UPDATE yourTable SET DateCol = DATEADD(year,1,DateCol)
答案 2 :(得分:0)
您可以在表格日期栏中添加要更新的一年,如下所示-
update YourTable
set YourDateColumn = DATEADD(year, 1,YourDateColumn)
where YourDateColumn <= GETDATE() --It will only update which has value less than next year. Remove or update it as required
与您的价值观一样
select DATEADD(year, 1,'2018-04-30 00:00:00.000')
答案 3 :(得分:0)
为此,您还可以使用计算列。与每天执行一次更新列的工作相比,这将意味着性能下降,但这将使您高枕无忧,因为该工作可能会失败并且您没有意识到。
该函数将是:
CAST(DATEADD(YEAR,1,GETDATE())AS DATE)
如果这是馈入报告的内容,我将使用sproc生成报告并动态添加由上述函数填充的列。
如果用于商业用途,我还将使用sproc并在内部动态计算变量。
我认为一栏总是指示一年中的日期的用处很少。这不是一个好主意。
答案 4 :(得分:0)
使用以下逻辑将时间设为00:00:00.000
SELECT CAST(CAST(DATEADD(YEAR, 1, GETDATE()) AS DATE) AS DATETIME)
中断:
2019-10-26 00:00:00.000
编辑
使用DATEFROMPARTS(已添加到sqlserver 2012)
SELECT CAST(DATEFROMPARTS ( YEAR(GETDATE())+1, 4, 30 ) AS DATETIME)
输出:
2019-04-30 00:00:00.000
DateFromParts来源: