テーブル: table_name
create table table_name
(
given_dates timestamp,
set_name varchar
);
レコードの挿入:
insert into table_name values('2001-01-01'),('2001-01-05'),('2001-01-10'),
('2001-01-15'),('2001-01-20'),('2001-01-25'),
('2001-02-01'),('2001-02-05'),('2001-02-10'),
('2001-02-15');
ここで、いくつかの日付の set_name を更新したいと思います。
例:
次のようにテーブルを更新したい:
given_dates set_name
----------------------
2001-01-01 s1
2001-01-05 s1
2001-01-10 s2
2001-01-15 s2
2001-01-20
2001-01-25
2001-02-01
2001-02-05
2001-02-10
2001-02-15
注:given_dates
およびset_name
は動的であるため、パラメータを渡します。上記のように 2 セット合格することs1,s2
もあれば、要件に応じて 4 セット合格することもあります。
だから私は更新のための動的ケースステートメントが必要set_name
です.
2 つのパラメータが与えられた場合:
declare p_dates varchar := '2001-01-01to2001-01-05,2001-01-10to2001-01-15';
declare p_sets varchar := 's1,s2';
次の静的スクリプトを使用してこれを行うことができます。
静的更新ステートメント:
update table_name
SET set_name =
CASE
when given_dates between '2001-01-01' and '2001-01-05' then 's1'
when given_dates between '2001-01-10' and '2001-01-15' then 's2'
else ''
end;
上記の update ステートメントは、ジョブを実行しますが、静的に実行します。
テーブルを更新するのと同じ方法で、パラメーターの変更に応じて変更できる動的にする必要がある case ステートメントのみを準備します(p_dates,p_sets)
。
質問:
- 指定された日付を分割する方法は
p_dates
? (to
2 つの日付の間にキーワードがあります。) - 指定されたセットを分割する方法は
p_sets
? (2 つの set_names の間に「,」コンマがあります。) p_dates
とを分割した後に動的な case ステートメントを準備する方法はp_sets
?
この質問は、 SQL Server 2008 R2 を使用した動的ケース ステートメントに関連しています。これは、Microsoft SQL Server の場合と同じです。