2017-05-15 54 views
0

我想將表中列的數據類型從text轉換爲boolean。列中的數據爲't'爲true,'f'爲false。如何從文本轉換爲布爾值考慮PostgreSQL中的值

我試圖把它與這一說法轉換:

ALTER TABLE public.checktypes ALTER COLUMN deleted SET DATA TYPE boolean USING deleted::boolean;

這適用於數據類型蠻好的轉換。問題是,他們現在都是false。我怎樣才能實現這個目標,如果在轉換前值't',布爾將設置爲true?

回答

0

第一:

update checktypes 
set deleted = case deleted when 't' then '1' when 'f' then '0' end 

則:

ALTER TABLE public.checktypes ALTER COLUMN deleted SET DATA TYPE boolean USING deleted::boolean; 
0
ALTER TABLE mytabe ALTER COLUMN mycolumn DROP DEFAULT; 
ALTER TABLE mytabe ALTER mycolumn TYPE bool USING CASE WHEN mycolumn=0 THEN FALSE ELSE TRUE END; 
ALTER TABLE mytabe ALTER COLUMN mycolumn SET DEFAULT FALSE; 
0

你可以試試這個方式: 創建臨時表,插入並將文本轉換爲布爾值到臨時表,刪除舊列,添加布爾類型的新列並調用更新

顯示此代碼:

create table _temp 
(
    id integer, 
    val_boolean boolean 
) 

insert into _temp(id,value) select id,val::boolean from your_table; 

alter table your_table drop column val; 

alter table your_table add column val boolean; 

update your_table t set val = (select val_boolean from _temp te where te.id = t.id);