我在sql server中有一个查询,它计算两个日期之间的差值,可以正确获取结果,但是我希望将该结果存储在数据库中的其中一列中。我已经在Google中搜索了很多次,但是它只显示datediff而不将结果存储在一列中。
Select DATEDIFF (DAY,date_1,date_2) As date_test from tbl_datetest;
答案 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
子句。