我试图坚持一个日期是在一个周末的桌子上。
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
T-SQL 不允许我这样做,因为它DatePart(dw, date)
是一个非确定性函数。
消息 4936,级别 16,状态 1,第 2
行表“PowerUsage”中的计算列“IsWeekEnd”无法持久化,因为该列是不确定的。
但实际上,2013 年 7 月 1 日是星期一。所以从技术上讲,它应该通过某种方法来确定。
T-SQL 不允许我使用上述内容的原因是您可以使用更改一周的开始日期
SET DATEFIRST
然后我想也许日期之间的天数会起作用,但我也遇到了同样的问题!
ADD [IsWeekEnd] AS
(CASE WHEN DATEDIFF(DAY, '20070101', [datetime]) % 7 > 4
THEN 1
ELSE 0 END) PERSISTED
还有其他方法吗?
克里斯