增加datetime字段的值

时间:2013-08-13 11:30:40

标签: sql-server sql-server-2008-r2

我正在使用SQLServer2008R2。我有一个名为RunningDate的列。

我想要的是,如果今天我将RunningDate的值设置为2013-08-13 00:00:00.000,那么明天它将自动更新为2013-08-14 00:00:00.000

我知道DATEADD函数但是如何在上面的场景中使用它?

任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:1)

您有两种选择:

选项A

将RunningDate列保留在表格之外并改为创建视图。将RunningDate列添加到视图CAST(CAST(GETDATE() AS DATE) AS DATETIME)

选项B

创建一个SQL Server代理作业,该作业在午夜定期更新表。请记住去除日期的时间部分(例如使用选项A中的强制转换),因为您永远无法确定该语句是否在00:00:00.000完全运行。

答案 1 :(得分:0)

试试这个 -

DECLARE @temp TABLE
(
      ID INT PRIMARY KEY
    , RunningDate DATETIME
)

INSERT INTO @temp (ID)
VALUES (1),(2),(3),(5),(8)

UPDATE tt
SET RunningDate = CAST(DATEADD(dd, t.rn, GETDATE()) AS DATE)
FROM @temp tt
JOIN (
    SELECT 
          ID
        , rn = ROW_NUMBER() OVER (ORDER BY 1/0) - 1
    FROM @temp
) t ON t.ID = tt.ID

SELECT * 
FROM @temp

输出 -

ID          RunningDate
----------- -----------------------
1           2013-08-13 00:00:00.000
2           2013-08-14 00:00:00.000
3           2013-08-15 00:00:00.000
5           2013-08-16 00:00:00.000
8           2013-08-17 00:00:00.000

答案 2 :(得分:0)

如果只有一个字段,我建议不要将其添加到数据库中。如果要在存储过程中使用它,请使用

SELECT GETDATE()

OR

SELECT DATEADD(day, DATEDIFF(day, '19000101', GETDATE()), '19000101');

匹配或代码中的DateTime.Now - 如果它是.NET。只需将一个条目存储到表中,就会增加很多开销。