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なら1dayweeklyなら7daysなどの日数をCURRENT_DATEに足してテーブルを更新しています。

CASE構文の書式は次のようになります。

CASE 対象のカラム
  WHEN 条件1 THEN 条件1に合ったときの値
  WHEN 条件2 THEN 条件2に合ったときの値
  ...
END

こうして、値を変化させることができます。

ともすた(たにぐち まこと)ともすた(たにぐち まこと)

カラムの型には列挙型(enum型)を設定することもできる。
「Database→Enumerated Types」メニューから、「Create type」をクリックして、値の選択肢を設定する。

そしたら、カラムの型設定のと頃で、作ったリストを選べばOK。

ちなみに、左側にある「Create enum types」から作成することも可能。