Sql server 使用SQL Server转换为确定性函数
我正在尝试使用SQL Server创建一个确定性函数,以便为视图创建一个索引,该索引调用此函数。此函数采用列名并将月底作为datetime返回。例如,Sql server 使用SQL Server转换为确定性函数,sql-server,function,deterministic,non-deterministic,Sql Server,Function,Deterministic,Non Deterministic,我正在尝试使用SQL Server创建一个确定性函数,以便为视图创建一个索引,该索引调用此函数。此函数采用列名并将月底作为datetime返回。例如,201701到20170131 你能帮我把它转换成确定性函数吗 CREATE FUNCTION dbo.ufnGetFiscalPeriodEndDate (@FiscalPeriod VARCHAR(10)) RETURNS DATE WITH SCHEMABINDING AS BEGIN RETURN EOMONTH(CAST(LE
201701
到20170131
你能帮我把它转换成确定性函数吗
CREATE FUNCTION dbo.ufnGetFiscalPeriodEndDate (@FiscalPeriod VARCHAR(10))
RETURNS DATE
WITH SCHEMABINDING
AS BEGIN
RETURN EOMONTH(CAST(LEFT(@FiscalPeriod, 4) + RIGHT(@FiscalPeriod, 2) + '01' AS DATE))
END
此OBJECTPROPERTY查询返回0
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetFiscalPeriodEndDate'), 'IsDeterministic')
如果你有
EOMONTH
,你就有DATEFROMPARTS
。我认为CAST
是不确定的,因为它可以依赖于语言设置。但这似乎对我有用:
ALTER FUNCTION dbo.ufnGetFiscalPeriodEndDate (@FiscalPeriod VARCHAR(10))
RETURNS DATE
WITH SCHEMABINDING
AS BEGIN
RETURN EOMONTH(DATEFROMPARTS(LEFT(@FiscalPeriod, 4), RIGHT(@FiscalPeriod, 2) , 1));
END
go
好极了!谢谢您!