选择子字符串直到PostgreSQL中的第一个整数

时间:2018-06-28 07:30:53

标签: sql postgresql

我有下表

code             number
XY1 N2           2
A2 O1            3
KB11 2HG         2
XY2 J2           3
A1 X2            5

我需要从代码中选择子字符串,直到第一个整数,即XY1 N2-> XY,然后对这些条目的数字进行汇总和求和,即XY 2 + 3和A 5 + 3。

我尝试过

SELECT LEFT(code,position('(1|2|3|4|5|6|7|8|9|0)' in code)-1) FROM listing;

但是它不起作用。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

此查询看起来可以满足您的要求:

SELECT 
substring(code, 1, strpos(code, substring(code FROM '(1|2|3|4|5|6|7|8|9|0)'))-1)AS sub1,
sum(number)
       FROM listing
       group by substring(code, 1, strpos(code, substring(code FROM '(1|2|3|4|5|6|7|8|9|0)'))-1)

       ;

http://sqlfiddle.com/#!17/3fc75/1

答案 1 :(得分:0)

这是您要寻找的答案:

select left(code, (select min(position(g::char in code))-1 
                   from generate_series(0,9) g 
                   where position(g::char in code)>0)) as key, sum(number) 
from listing group by key;

希望有帮助!

答案 2 :(得分:0)

借助正则表达式匹配,下面的简单查询将提供所需的结果。

  select
    substring(code,'\D+') as c,
    sum(number)
  from listing
  group by c