いくつかの日付に基づいて true または false または 0 または 1 を返すことができる関数を作成しようとしています。たとえば、「2010 年 3 月 1 日」と「2010 年 3 月 2 日」の開始日と終了日が日付範囲内にあるかどうかを確認したいとします。したがって、日付範囲が「2012 年 1 月 1 日 - 2012 年 12 月 30 日」の場合は true を返します。それ以外の場合、日付範囲が「2011 年 1 月 1 日」から 2011 年 12 月 30 日」の場合は false を返します。
現在、私は以下を使用していますが、最適化されておらず、これを何度も呼び出すと時間がかかると感じています。
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