sql server告诉我这个函数是不确定的。我很困惑,因为给定日期x它将始终返回相同。
DATEADD(d, 13 - DATEDIFF(d, '9/23/10', serviceDate) % 14, serviceDate)
答案 0 :(得分:1)
CONVERT(DATE, DATEADD(d, 13 - DATEDIFF(d, CONVERT(DATE, '9/23/10',101), serviceDate) % 14, serviceDate),101)
在索引计算中引用日期数据类型字符串文字时 在SQL Server的列中,我们建议您显式转换 通过使用确定性日期的文字到您想要的日期类型 格式样式。有关日期格式样式的列表 确定性的,请参阅CAST和CONVERT。涉及隐含的表达式 考虑将字符串转换为日期数据类型 nondeterministic,除非数据库兼容级别设置为80 或更早。这是因为结果取决于LANGUAGE和 DATEFORMAT服务器会话的设置。例如,结果 表达CONVERT(datetime,' 30 listopad 1996',113)取决于 LANGUAGE设置,因为字符串' 30 listopad 1996'手段 不同月份的不同语言。同样,在表达式中 DATEADD(mm,3,' 2000-12-01'),数据库引擎解释字符串 ' 2000-12-01'基于DATEFORMAT设置。
CAST
确定性除非与datetime,smalldatetime或。一起使用 SQL_VARIANT。
CONVERT
确定性,除非存在以下条件之一:
...
源或目标类型是datetime或smalldatetime,另一个来源 或目标类型是字符串,非确定性样式是 指定。要确定性,样式参数必须是a 不变。另外,小于或等于100的样式是 非确定性,样式20和21除外。样式大于100 除了样式106,107,109和113之外,它们是确定性的。