如何使非确定性函数具有确定性?

时间:2018-02-16 23:52:32

标签: sql sql-server function deterministic

我试图理解为什么我的功能是非确定性的。我想将此函数放在计算列和索引上。 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

网上的信息提到了投射和转换日期,但这些例子似乎并不适用于我的情况。我理解确定性意味着函数总是在给定相同输入的情况下返回相同的输出。我觉得这个功能就是这样。

我很困惑究竟是什么问题。

0 个答案:

没有答案