我试图坚持在一个桌子周末约会.
ADD [IsWeekEnd] AS
(CASE DATEPART(dw, GETDATE())
WHEN 1 THEN 1
WHEN 6 THEN 1
ELSE 0 END) PERSISTED
ADD [IsWeekEnd] AS
(CASE SUBSTRING(DATENAME(dw, GETDATE()), 1, 3)
WHEN 'Sun' THEN 1
WHEN 'Sat' THEN 1
ELSE 0 END) PERSISTED
Run Code Online (Sandbox Code Playgroud)
T-SQL不允许我这样做,因为它DatePart(dw, date)是一个非确定性函数.
消息4936,级别16,状态1,行2
表'PowerUsage'中的计算列'IsWeekEnd'无法保留,因为该列是非确定性的.
但实际上,2013年7月1日是星期一.所以在技术上它应该是某种方法的确定性.
T-SQL不允许我使用上述内容的原因是您可以使用更改一周的开始日期
SET DATEFIRST
Run Code Online (Sandbox Code Playgroud)
然后我想也许日期之间的天数可能有效,但我也遇到了同样的问题!
ADD [IsWeekEnd] AS
(CASE WHEN DATEDIFF(DAY, '20070101', [datetime]) % 7 > 4
THEN 1
ELSE 0 END) PERSISTED
Run Code Online (Sandbox Code Playgroud)
还有其他方法吗?
克里斯