2017-11-29 15 views
0

レコードを値の範囲で更新するには、BETWEEN演算子を使用していることに気付いています。範囲がサブクエリによって定義されている複数のレコード範囲を更新するにはどうすればよいですか?

UPDATE datetable 
    SET tableflag = 1 
WHERE date BETWEEN '2017-02-01' AND '2017-03-01' 

は(これは、単一または複数の固定範囲を処理するための簡単な方法である2017年2月の第一と月2017年の第一間の日付があるすべてのレコードに対して1にフィールド「tableflag」を設定しますBETWEENオペレータの間のいくつかの条件を使用して)。

2017年の2月の最初と最後の日曜日の間に日付があるレコードごとに 'tableflag'を1に設定すると、サブクエリを使用して2月の最初と最後の日曜日の日付を生成できます。

しかし、上記の問題の条件が一般化され、年にかかわらず、2月の最初と最後の日曜日の間にあるすべてのレコードで 'tableflag'を1に設定する必要がある場合、問題はかなり発生しますより複雑。 between演算子は単一の行を必要とし、それを渡すと同じ大きさの2つのサブクエリがエラーをスローします(サブクエリは1行以上を返します)。

私は一般化された問題をどのように解決できますか?

答えて

0

日付が範囲内の連続した日付ではなく、個々の日付のセットである複雑なパターンを記述しています。

特定の日付のパターンが必要な場合は、BETWEENの代わりにIN()という述語を使用します。

SQLで複雑なパターンのパターンを生成するのは厄介なので、堅牢な日付ライブラリにアクセスできるクライアントアプリケーションを使用してください。より便利なメソッドで希望の日付のリストを生成し、SQLのIN()述語でそのリストを使用します。

関連する問題