【发布时间】:2022-01-17 20:47:33
【问题描述】:
我想保留这个字段,但不知道为什么它是不确定的。
CREATE FUNCTION GetServiceMinutes
(
-- Add the parameters for the function here
@StartDate datetime,
@EndDate datetime
)
RETURNS int WITH SCHEMABINDING
AS
BEGIN
DECLARE @Result int
SET @StartDate = CASE WHEN DATEPART(HOUR, @StartDate) < 8 THEN DATEADD(DAY, DATEDIFF(DAY, 0, @StartDate), '08:00:00') ELSE @StartDate END
SET @EndDate = CASE WHEN DATEPART(HOUR, @EndDate) >= 17 THEN DATEADD(DAY, DATEDIFF(DAY, 0, @EndDate), '17:00:00') ELSE @EndDate END
SET @Result =
CASE WHEN DATEPART(DAY, @StartDate) != DATEPART(DAY, @EndDate) THEN 1000
WHEN DATEPART(HOUR, @EndDate) < 8 THEN 0
WHEN DATEPART(HOUR, @StartDate) >= 17 THEN 0
ELSE DATEDIFF(MINUTE, @StartDate, @EndDate)
END
RETURN @Result
END
GO
这将返回 0
SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].GetServiceMinutes'), 'IsDeterministic')
使用 SQL Server 2017
【问题讨论】:
-
您的(日期和)时间字符串的隐式转换很可能是候选对象。这是不允许的。它必须是显式并带有样式代码。
-
我也对那个表达感到困惑。您将 days 添加到
'08:00:00',但这显然是time,而不是日期和时间。
标签: sql-server tsql non-deterministic