从PostgreSQL中的varchar中提取id号

时间:2012-01-19 04:24:56

标签: regex postgresql numeric

我有一个字段,其中包含我想要提取到另一列的ID号的混合数据。我想要提取的列有一些匹配格式'lastname,firstname-ID'的记录。我只想删除“ID”部分,以及那些后面带有“ - ”和数字的列。

所以我试图做的是......

update data.xml_customerqueryrs
set new_id = regexp_replace(name, '[a-z]A-Z]', '')
where name like '%-%';

我知道我需要修复一些小问题,但我不确定,因为模式匹配的postgresql文档并没有真正做好覆盖仅搜索数字的工作。

2 个答案:

答案 0 :(得分:3)

如果您确实only want to strip the 'ID' part

new_id = regexp_replace(name, '-.*?$', '')

或者,如果您实际上想要提取 ID部分:

new_id = substring(name, '-(.*?)$')

我使用*? quantifier,因此只提取最后一部分,其中名称中包含-。像:

Skeet-Gravell,John-1234
当前手册

中的

String functions

答案 1 :(得分:1)

或者您也可以这样做:

new_id = substr(name, strpos(name, '-'), length(name)) 

参考:Strings