Open2
PostgreSQL on Supabaseのメモ
CASE構文
条件によって、値を変化させることができる構文。例えば、次のようなタスク管理などのテーブルの形式で、
カラム名 | 型 |
---|---|
id | int |
repeat | string |
start_date | date |
repeatカラムに、daily
とかweekly
とかmonthly
などの文字列が挿入されているとします。この時、start_date
というカラムが、daily
なら1日後、weekly
なら7日後といった具合に、繰り返される日程を記録したいとしましょう。
このような場合、次のようなSQLを使うことができます。
UPDATE TASKS SET
start_date = CASE repeat
WHEN 'daily' THEN CURRENT_DATE + INTERVAL '1day'
WHEN 'weekly' THEN CURRENT_DATE + INTERVAL '7days'
WHEN 'monthly' THEN CURRENT_DATE + INTERVAL '1month'
END
WHERE id = ?
この場合、repeat
カラムがdaily
なら1day
、weekly
なら7days
などの日数をCURRENT_DATE
に足してテーブルを更新しています。
CASE構文の書式は次のようになります。
CASE 対象のカラム
WHEN 条件1 THEN 条件1に合ったときの値
WHEN 条件2 THEN 条件2に合ったときの値
...
END
こうして、値を変化させることができます。
カラムの型には列挙型(enum型)を設定することもできる。
「Database→Enumerated Types」メニューから、「Create type」をクリックして、値の選択肢を設定する。
そしたら、カラムの型設定のと頃で、作ったリストを選べばOK。
ちなみに、左側にある「Create enum types」から作成することも可能。