我只想用其他列的值填充my_table的column7,因此column7-value的结果如下所示:86 | WWB | 2014或86 | WWB | - 如果column3的值为0.这是我的SQL :
UPDATE public.my_table
SET column7 =
case when column1 IS NULL then '-' else column1 end
|| '|' ||
case when column2 IS NULL then '-' else column2 end
|| '|' ||
case when column3 = '0' then '-' else column3 end
error: invalid input syntax for integer: "_"
问题在于最后一个case-row,因为column3是整数。 Column1和column2是bpchar,column3是int2。 有没有办法解决这个问题?
答案 0 :(得分:1)
您正在进行类型冲突。在Postgres中很容易转换:
UPDATE public.my_table
SET column7 = (coalesce(column1::text, '-') || '|' ||
coalesce(column2::text, '-') || '|' ||
(case when column3 = 0 then '-' else column3::text end)
);
答案 1 :(得分:1)
使用concat
会使这更容易阅读,它会自动将所有内容转换为文本。但是case语句需要为所有分支生成相同的数据类型,因此text
仍需要转换为column3
UPDATE public.my_table
SET column7 = concat(
coalesce(column1, '-'), '|'
coalesce(column2, '-'), '|'
case when coalesce(column3,0) = 0 then '-' else column3::text end
);