如何在postgresql中将bigint中的字段更改为字符?

时间:2011-05-10 08:06:56

标签: postgresql

我收到错误“不兼容的类型:bigint和字符变化。”但我知道通常有一个技巧可以绕过这个。

3 个答案:

答案 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

再次,

谢谢。