週番号の列と年番号の列があります。たとえば、次のような時間間隔でデータベースを検索したいと思います。
今年の1週間と翌年の1週間を検索する場合、どのクエリを使用すればよいですか?
年が同じであれば、それは簡単で、私のクエリは次のようになります。
Select *
From mytable
Where (Finish_Week BETWEEN @Finish_Week1 AND @Finish_Week2)
AND (Finish_Year = @Finish_Year)
週番号の列と年番号の列があります。たとえば、次のような時間間隔でデータベースを検索したいと思います。
今年の1週間と翌年の1週間を検索する場合、どのクエリを使用すればよいですか?
年が同じであれば、それは簡単で、私のクエリは次のようになります。
Select *
From mytable
Where (Finish_Week BETWEEN @Finish_Week1 AND @Finish_Week2)
AND (Finish_Year = @Finish_Year)
簡単な答え:
SELECT *
FROM MYTABLE
WHERE ( FINISH_WEEK >= @Finish_Week1
AND FINISH_YEAR = @Finish_Year - 1 )
OR ( FINISH_WEEK <= @Finish_Week2
AND FINISH_YEAR = @Finish_Year )
このソリューションは、@Finish_Year が 2 年目であることを前提としています。
簡単な説明:
このソリューションは、他の回答のように1年離れている必要はありません。年 + 週を、直接比較できる線形形式に正規化します。
SELECT *
FROM mytable
WHERE Finish_Year*53+Finish_Week BETWEEN @Finish_Year1*53+@Finish_Week1 AND @Finish_Year2*53+@Finish_Week2
それが遅すぎる場合 (テーブルに多くの行があるため)、Finish_Year にインデックスがある場合は、次を追加します。
AND Finish_Year BETWEEN @Finish_Year1 AND @Finish_Year2
Finish_Week、Finish_Yearにインデックスがある場合、最良の方法は書くことだと思います
select *
from mytable
where
(
Finish_Year = @Finish_Year and Finish_Week >= @Finish_Week1 or
Finish_Year = @Finish_Year + 1 and Finish_Week <= @Finish_Week2
)
インデックスがない場合は、週と年を日付に変換してから日付を比較することを検討してください。