4

SQL Server 2012 本身是否可以自动计算列?

例如:我有三列START_DATEEND_DATEDURATION

我想通过这样做来获得持续时间:

DURATION = END_DATE - START_DATE

所以我得到了天数的持续时间。

SQL Server 2012 是否可以在创建记录时自动执行此操作?

4

2 回答 2

6

是的,当然 - 只需定义Duration为计算列:

ALTER TABLE dbo.YourTable
ADD Duration AS DATEDIFF(DAY, START_DATE, END_DATE) PERSISTED

然后你就走了。现在Duration将始终显示这两个其他列之间的差异(以天为单位)。PERSISTED如果您使用关键字,计算的值将与您的其他列值一起存储。如果两个“相关”列中的任何一个也发生更改,则此列将被更新。

更新:如果你想得到日期和今天之间的差异,你可以使用

ALTER TABLE dbo.YourTable
ADD Duration AS DATEDIFF(DAY, START_DATE, GETDATE()) 

但不幸的是,由于该GETDATE()函数是不确定的(毕竟——每次调用它的返回值都会改变),所以不能使用PERSISTED关键字。这意味着:每次访问该列(询问其值)时,都会再次进行计算。

于 2013-04-14T12:03:40.433 回答
0

在您的表设计中,在 Computed Column Specification 下输入任何这些以(Formula)获得所需的结果。

对于日期差异:

CAST(job_end - job_start) AS TIME(0))

持续时间:

SUBSTRING(CONVERT(VARCHAR(20),(END_DATE-START_DATE),120),12,8)

同样,您可以计算Second, Minute, Hour, Month,Year差异。

使用语法DATEDIFF

DATEDIFF ( datepart , startdate , enddate )

供你参考:

DATEDIFF(SECOND, GETDATE(), GETDATE() + 1) AS SecondDifference
DATEDIFF(MINUTE, GETDATE(), GETDATE() + 1) AS MinuteDifference
DATEDIFF(HOUR, GETDATE(), GETDATE() + 1) AS HourDifference
DATEDIFF(DAY, GETDATE(), GETDATE() + 1) AS DayDifference
DATEDIFF(WEEK, GETDATE(), GETDATE() + 1) AS WeekDifference
于 2016-06-13T13:04:21.923 回答