我正在嘗試編寫一個函數,它可以根據某些日期返回true或false或0或1。因此,假設您想要檢查例如「2010年3月」&「Mar 02 2010」的開始日期是否在日期範圍內。所以如果你的日期範圍是「2012年1月1日 - 2012年12月30日」,那麼它將返回true,否則如果日期範圍是'2011年1月1日'到2011年12月30日'那麼它將返回錯誤。如何優化以下SQL函數
當前我使用以下。而我覺得這是不優化,以當你調用很多次了一段時間
CREATE FUNCTION dbo.tmpfnIsDateInRange (@rangeStart DATETIME,
@rangeEnd DATETIME,
@chkStart DATETIME,
@chkEnd DATETIME)
RETURNS TINYINT
AS
BEGIN
RETURN CASE
WHEN @chkStart BETWEEN @rangeStart AND @rangeEnd
OR @chkEnd BETWEEN @rangeStart AND @rangeEnd
THEN
1
WHEN @chkStart <= @rangeStart AND @chkEnd >= @rangeEnd
THEN
1
ELSE
0
END;
END
我會特別說避免使用標量函數。在表函數中包裝所有這些不應該妨礙性能,並且允許邏輯被類似地重用到表/視圖中,但是具有參數。 – JeffO