SQL:日期函数

时间:2018-10-26 15:35:08

标签: sql sql-server

每天,我必须更新表中的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')

谢谢

5 个答案:

答案 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来源:

Here