2017-03-09 2 views
0

この関数を呼び出すビューのインデックスを作成できるように、SQL Serverで確定的な関数を作成しようとしています。この関数は列名をとり、その月の終わりをdatetimeとして返します。たとえば、20170120170131です。SQL Serverで確定的関数に変換する

これを決定的な関数に変換するのを手伝ってもらえますか?このOBJECTPROPERTYクエリが0を返す

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 

...

SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetFiscalPeriodEndDate'), 'IsDeterministic') 

答えて

1

あなたが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 
+0

素晴らしい!ありがとうございました! –

関連する問題