我收到错误“不兼容的类型:bigint和字符变化。”但我知道通常有一个技巧可以绕过这个。
答案 0 :(得分:9)
似乎在PG 9.0中可以正常工作,但如果不在你的版本中,你总是可以先转换为文本:
select 1::bigint::text::varchar;
答案 1 :(得分:4)
alter table abc alter column def type varchar using def::varchar;
答案 2 :(得分:0)
首先,谢谢你和#34; Denis de Bernardy" (上文评论),
我正在尝试更新字段,这非常有用。
最近,我一直在学习PostgreSQL VS Redshift SQL以及查询的不同......
因此,尝试在RedShift中进行更新,它的工作原理如下:
UPDATE table_name SET fieldname = fieldname + 100
FROM table_name WHERE substring(fieldname from 4 for 2)
IN ('01','02','03','04','05','06','07','08','09','10','11','12');
但是在Postgres 9.3中,我的查询失败了。
经过大量的研究,并试图找到任何可以使其发挥作用......
最后,我添加的所有内容都是::varchar
到字段名的末尾,如下所示:
fieldname::varchar
原因是postgresql substring()需要文本,而我的fieldname是BIGINT,这阻止了我无法使用子功能。
所以要比较查询:
旧查询
UPDATE table_name SET fieldname = fieldname + 100
FROM table_name WHERE substring(fieldname from 4 for 2)
IN ('01','02','03','04','05','06','07','08','09','10','11','12');
Postgres的新查询9.3
UPDATE table_name SET fieldname = fieldname + 100
FROM table_name WHERE substring(fieldname::varchar from 4 for 2)
IN ('01','02','03','04','05','06','07','08','09','10','11','12');
请注意:我所要做的就是将要在子字符串查询中使用的字段转换为包含:: varchar
再次,
谢谢。