2017-03-09 22 views
0

我想用SQL Server創建一個確定性函數,這樣我就可以爲調用此函數的視圖創建一個索引。該函數獲取一個列名稱並將該月的結尾作爲日期時間返回。例如,20170120170131使用SQL Server轉換爲確定性函數

你能幫我把它轉換成確定性函數嗎?

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') 

回答

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

太棒了!謝謝! –