如何将DATEDIFF结果插入表中的列?

时间:2018-06-29 12:39:15

标签: sql-server

我在sql server中有一个查询,它计算两个日期之间的差值,可以正确获取结果,但是我希望将该结果存储在数据库中的其中一列中。我已经在Google中搜索了很多次,但是它只显示datediff而不将结果存储在一列中。

Select DATEDIFF (DAY,date_1,date_2) As date_test from tbl_datetest;

4 个答案:

答案 0 :(得分:2)

您可以将结果存储为INT。 返回类型是整数: https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017

或者您可以保留计算列:

ALTER TABLE tbl_datetest 
ADD 
  [date_test] AS DATEDIFF (DAY,date_1,date_2) PERSISTED

答案 1 :(得分:0)

UPDATE yourtable 
SET    yourcolumn = (SELECT Datediff (day, date_1, date_2) AS date_test 
                     FROM   tbl_datetest
                     WHERE  primarykey = avalue) 
WHERE  primarykey = avalue  

这将对所需的表执行更新,并使用返回值DATEDIFF()

覆盖所需的列

但是,如果要将值存储在另一个表中,则可以使用此方法,如果将值保留在同一表中,则可以使用@ 7schmiede建议的计算列。

答案 2 :(得分:0)

存储可以从其他字段得出的值是Transitive Depency design error。正如@Lamu所说,“计算列”是可以的,否则,您也可以将该计算结果放在view中。

答案 3 :(得分:0)

尝试一下。我认为这与在查询中使用AS的派生列命名只是一个混淆。因为在用计算所得的列更新列值时,您无需命名它。

要更新同时存在两个日期列的同一表中的列值。

update tbl_datetest set <SameTableColumnName> = DATEDIFF (DAY,date_1,date_2) from tbl_datetest

使用当前表的两个日期列更新另一个表中的列值

update <OtherTableName> set <OtherTableColumnName> = DATEDIFF (DAY,b.date_1,b.date_2) from tbl_datetest b

在同一查询中根据需要使用where子句。