1. 程式人生 > >postgresql將表中的欄位由varchar型別改為int型別

postgresql將表中的欄位由varchar型別改為int型別

因業務需要,遂將表中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

成功 (ˇˍˇ) ~