postgresql update 設置某列爲某些條件生成的值

with tmp as( select row_number() over() as rownum,id idd  from bas_cm_verification_strategy)
update bas_cm_verification_strategy
set code = COALESCE(to_char(create_time, 'yyyyMMdd')) || lpad(CAST(tmp.rownum as VARCHAR), 3, '0')
from tmp where id = tmp.idd;

需求說明:

   接到一個需求:給表bas_cm_verification_strategy新增一個code字段,表中歷史數據要根據創建時間+001遞增來設置code的值。

註釋:

其中 row_number() over() 獲取到的是數據的行號,此處爲了省事沒有用序列。

lpad(string text, length int [, fill text])    通過填充字符 fill (缺省時爲空白), 把 string 填充爲長度 length。 如果 string 已經比 length 長則將其截斷(在右邊)。類似的還有rpad,不過填充的位置相反。

COALESCE(to_char(create_time, 'yyyyMMdd')) 格式化時間

CAST(tmp.rownum as VARCHAR)    轉換格式爲字符串

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章