我试图理解为什么我的功能是非确定性的。我想将此函数放在计算列和索引上。 SQL抱怨它不确定。
ALTER FUNCTION [dbo].[GetPeriodFromDates]
(
-- Add the parameters for the function here
@from date,
@to date
)
RETURNS char(1)
AS
BEGIN
declare @result char(1)
select @result = case
when DateAdd(day, -1, DateAdd(year, 1, @from)) = @to then 'Y'
when DateAdd(day, -1, DateAdd(quarter, 1, @from)) = @to then 'Q'
when DateAdd(day, -1, DateAdd(month, 1, @from)) = @to then 'M'
when DateAdd(day, -1, DateAdd(week, 1, @from)) = @to then 'W'
else NULL
end
return @result
END
网上的信息提到了投射和转换日期,但这些例子似乎并不适用于我的情况。我理解确定性意味着函数总是在给定相同输入的情况下返回相同的输出。我觉得这个功能就是这样。
我很困惑究竟是什么问题。