【问题标题】:Return only numeric values from column - Postgresql仅返回列中的数值 - Postgresql
【发布时间】:2014-03-23 16:32:39
【问题描述】:

我在contacts 表中的name 列中有几个值,类似于这个:

test 3100509 DEMO NPS

我只想返回 name 中每个值的数字部分。

我试过了:

select substring(name FROM '^[0-9]+|.*') from contacts

但这并没有。

关于如何从返回值中去除所有非数字字符有什么想法吗?

【问题讨论】:

    标签: sql postgresql pattern-matching


    【解决方案1】:

    试试这个:

    select substring(name FROM '[0-9]+') from contacts
    

    【讨论】:

    • 不是最佳答案。如果我输入:select substring('998343913-15' from '[0-9]+') 我得到998343913 而不是99834391315
    【解决方案2】:

    select regexp_replace(name , '[^0-9]*', '', 'g') from contacts;

    应该这样做。即使名称中有多个数字序列,它也会起作用。

    例子:

    create table contacts(id int, name varchar(200));
    
    insert into contacts(id, name) values(1, 'abc 123 cde 555 mmm 999');
    
    select regexp_replace(name , '[^0-9]*', '', 'g') from contacts;
    

    【讨论】:

    【解决方案3】:

    如果你想提取带小数点的数值而不是使用这个

    select NULLIF(regexp_replace(name, '[^0-9.]*','','g'), '')::numeric from contacts
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      相关资源
      最近更新 更多