Postgresql

根據條件語句設置列值

  • February 14, 2021

我想根據以下條件向新列添加值:如果 board_stage 小於 alight_stage 則 service_direction 等於 1,表示入站;如果不是,則 service_direction 等於 0,表示 Outbound。

我嘗試過的程式碼如下。主要問題是它在 CASE 語句之前不斷返回語法錯誤。我也玩過 WHERE 和 IF 語句。但是,這會在相同位置返回相同的語法錯誤,即就在條件語句之前。

有小費嗎?非常感謝

ALTER TABLE smartcardtable
ADD service_direction boolean;

UPDATE smartcardtable
SET service_direction
CASE board_stage < alight_stage THEN service_direction = '1'
ELSE '0' END;

正確的語法是:

UPDATE <table_name>
SET <column_name> = <expression> ;

其他小的改進:

  • case 表達式也需要CASE WHEN <boolean_expression> ...
  • 更新的列是布爾值,因此您應該輸出 TRUE 或 FALSE(它將與 1 和 0 一起使用,但沒有比您的程式碼清晰更好的了)。

在你的情況下:

UPDATE smartcardtable
SET service_direction =
       CASE WHEN board_stage < alight_stage
           THEN TRUE
           ELSE FALSE
       END
;

如果另外兩列 (board_stagealight_stage) 不可為空,則可以用更簡單的布爾表達式替換 case 表達式(括號僅為了清楚起見):

UPDATE smartcardtable
SET service_direction = (board_stage < alight_stage)
;

引用自:https://dba.stackexchange.com/questions/285380