为什么我的 SQL 函数是非确定性的,而它不应该是?

Why is my SQL function non-deterministic, when it shouldn't be?

根据 MS docs DATEADD 是一个确定性函数,因此我下面的函数也应该是确定性的:

CREATE FUNCTION [dbo].[Epoch2Date] (@i INT)
RETURNS DATETIME WITH SCHEMABINDING
BEGIN
    RETURN DATEADD(SECOND,@i,'1970-01-01 00:00:00')
END

但是当我用 SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].[Epoch2Date]'), 'IsDeterministic') 检查它时 returns 0 (非确定性)。

  1. 为什么它是不确定的?
  2. 如何使我的函数具有确定性?

有一个类似的,但它使用非确定性函数CAST,这里不是这种情况。

DATEADD。但是,将 varchar 隐式转换为 datetime 而不是 。当您使用的格式对于 datetime 不明确时,情况尤其糟糕(尽管至少值是相同的)。

您需要使用样式显式转换值:

DATEADD(SECOND,@i,CONVERT(datetime,'19700101',112))