postgresql將表中的欄位由varchar型別改為int型別
阿新 • • 發佈:2019-02-03
因業務需要,遂將表中sort_num欄位從varchar型別改為int型別,但是在修改中卻發現瞭如下問題:
錯誤: 欄位 “sort_num” 不能自動轉換成型別 integer
HINT: 指定一個USING表示式來執行轉換
一.首先我檢查了一下sort_num裡面的資料,都是數字字元
二.然後使用alter table menus alter column sort_num int4;
結果報錯:
[SQL]alter table menus alter column sort_num int4;
[Err] 錯誤: 語法錯誤 在 "int4" 或附近的
LINE 1: alter table menus alter column sort_num int4;
三.新增set data TYPE,SQL語句:
alter table menus alter column sort_num set data TYPE int4;
繼續報錯:
[SQL]alter table menus alter column sort_num set data TYPE int4;
[Err] 錯誤: 欄位 "sort_num" 不能自動轉換成型別 integer
HINT: 指定一個USING表示式來執行轉換
四.詢問度娘,說是因為該欄位上面有約束,也就是說這個欄位的預設值為null,而null是無法轉換成整型。
處理方法:
1.將這個欄位的預設值改為0,只要改為整型就可以,所以也可以是1,2,3…..等等
2.使用using,如果表中欄位沒有資料則可以直接使用using 0,如果表中有欄位則使用 using 欄位::int4
最後的SQL
ALTER TABLE menus ALTER COLUMN sort_num
SET DATA TYPE int4 USING sort_num :: int4,
ALTER COLUMN sort_num
SET DEFAULT 0;
結果:
[SQL]ALTER TABLE menus ALTER COLUMN sort_num
SET DATA TYPE int4 USING sort_num :: int4,
ALTER COLUMN sort_num
SET DEFAULT 0;
時間: 0.013s
受影響的行: 0
成功 (ˇˍˇ) ~