我想将值从varchar字段“复制”到布尔值字段。在varchar字段中,我具有“是”和“否”之类的值。当我要填充布尔值字段时,出现一条错误消息,提示我需要进行类型转换。我认为我需要演员表,但我不知道该怎么写。
一个理论例子
INSERT INTO mytable (booleanfield)
VALUES (
SELECT CASE
WHEN varcharfield like 'yes' THEN 'true'
WHEN varcharfield like 'no' THEN 'false'
END
FROM mytable);
答案 0 :(得分:3)
您可以使用
将字符串转换为布尔值
例如
INSERT INTO mytable2(booleanfield,varcharfield)
SELECT varcharfield::boolean,varcharfield FROM mytable;
mytable2是由
创建的 CREATE TABLE mytable2 AS SELECT * FROM mytable WHERE 1=0
取决于问题中的insert
逻辑。或者直接喜欢将update
用作:
UPDATE mytable
SET booleanfield=varcharfield::boolean;
是“是”或“是”或“ y”或“ Y”会转换为
true
, “否”或“否”或“ n”或“ N”被转换为false
。
答案 1 :(得分:2)
如果要更改现有行的列,则需要执行UPDATE。 INSERT用于创建全新的行。
您可以像这样更新列:
update mytable
set boolean_column = varchar_column = 'yes'
请注意,这与您的CASE表达式略有不同,因为它会将所有非'yes'
的内容都视为false
。因此,值'foobar'
也将被视为false