SQL Server 2012 本身是否可以自动计算列?
例如:我有三列START_DATE
,END_DATE
和DURATION
。
我想通过这样做来获得持续时间:
DURATION = END_DATE - START_DATE
所以我得到了天数的持续时间。
SQL Server 2012 是否可以在创建记录时自动执行此操作?
SQL Server 2012 本身是否可以自动计算列?
例如:我有三列START_DATE
,END_DATE
和DURATION
。
我想通过这样做来获得持续时间:
DURATION = END_DATE - START_DATE
所以我得到了天数的持续时间。
SQL Server 2012 是否可以在创建记录时自动执行此操作?
是的,当然 - 只需定义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
关键字。这意味着:每次访问该列(询问其值)时,都会再次进行计算。
在您的表设计中,在 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