小编Chr*_*owe的帖子

如何坚持指示日期的位字段是在周末?

我试图坚持在一个桌子周末约会.

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)

还有其他方法吗?

克里斯

t-sql sql-server persistence date weekend

4
推荐指数
1
解决办法
148
查看次数

标签 统计

date ×1

persistence ×1

sql-server ×1

t-sql ×1

weekend ×1