1

週番号の列と年番号の列があります。たとえば、次のような時間間隔でデータベースを検索したいと思います。

今年の1週間と翌年の1週間を検索する場合、どのクエリを使用すればよいですか?

年が同じであれば、それは簡単で、私のクエリは次のようになります。

Select *
From mytable
Where (Finish_Week BETWEEN @Finish_Week1 AND @Finish_Week2) 
       AND (Finish_Year = @Finish_Year)
4

3 に答える 3

2

簡単な答え:

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 年目であることを前提としています。

簡単な説明:

  • 最初の条件 - その年が最初の年 (@Finish_Year - 1) で、その週が最初の年の週と同じかそれより上である場合。
  • 2 番目の条件 - その年が 2 年目 (@Finish_Year) で、その週が 2 年目の週の前または等しい場合。
于 2012-10-15T06:54:43.827 に答える
0

このソリューションは、他の回答のように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
于 2012-10-15T06:49:49.337 に答える
0

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
   )

インデックスがない場合は、週と年を日付に変換してから日付を比較することを検討してください。

于 2012-10-15T06:56:50.613 に答える