我有下表
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;
但是它不起作用。有什么建议吗?
答案 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)
;
答案 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