如果字符串包含数字,则仅返回字符串中的数字

时间:2014-09-05 08:29:01

标签: sql regex postgresql substring

例如,字符串abc123CD需要找出一种方法,只读取字符串中的数字,即

  select a_postgres_function('abc123CD')

  ------
  Result
  ------
  123

我的尝试

 select substring('abc123CD' from '%#"^[0-9]+$#"%' for '#')

3 个答案:

答案 0 :(得分:1)

试试这个:

select (regexp_matches('abc123CD', '\d+'))[1];

由于regexp_matches返回文本数组,您应该通过[1]访问第一个元素。

答案 1 :(得分:0)

根据ntalbs's Answer


将该查询包装到功能

create or replace function shownums(text) returns integer as 
$$
select (regexp_matches($1,'\d+'))[1]::int; 
$$
language sql;

答案 2 :(得分:0)

如果您想从字符串中获取所有数字字符(而不仅仅是第一组),则删除所有不是数字的字符会更容易:

select regexp_replace('abc123CD45ef', '[^\d]+', '', 'g');

-- regexp_replace
-- --------------
--    '12345'