SQL Server 2012本身是否可以自动计算列?
例如:我有三列START_DATE
,END_DATE
和DURATION
。
我希望通过这样做来获得持续时间:
DURATION = END_DATE - START_DATE
所以我得到了天数的持续时间。
SQL Server 2012是否可以在创建记录时自动执行此操作?
答案 0 :(得分: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
关键字。这意味着:每次访问该列(询问其值)时,将再次进行计算。
答案 1 :(得分:0)
在“表格设计”中,在“计算列规范”下的(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