gpt4 book ai didi

sql-server - 如何保留指示日期是周末的位字段?

转载 作者:行者123 更新时间:2023-12-03 02:45:12 28 4
gpt4 key购买 nike

我试图坚持认为表中的日期是周末。

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) 是一个非确定性函数。

Msg 4936, Level 16, State 1, Line 2
Computed column 'IsWeekEnd' in table 'PowerUsage' cannot be persisted because the column is non-deterministic.

但事实上,2013 年 7 月 1 日是星期一。因此从技术上讲,它应该通过某种方法来确定。

T-SQL 不允许我使用上述内容的原因是您可以使用

更改一周的开始日期
SET DATEFIRST

然后我想也许日期之间的天数会起作用,但我也遇到了同样的问题!

ADD [IsWeekEnd] AS 
(CASE WHEN DATEDIFF(DAY, '20070101', [datetime]) % 7 > 4
THEN 1
ELSE 0 END) PERSISTED

还有其他方法可以做到这一点吗?

克里斯

最佳答案

DATEDIFF 本身是确定性的。您可以使用 39081 代替 if '20070101',因为从字符串的隐式转换似乎被视为不确定。

ADD [IsWeekEnd] AS 
(CASE WHEN DATEDIFF(DAY, 39081, [datetime]) % 7 > 4
THEN 1
ELSE 0 END) PERSISTED

39081 来自

Select CAST(Cast('20070101' as DateTime) as int)  

关于sql-server - 如何保留指示日期是周末的位字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17393982/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com