我需要在 DB2 SQL 中的字符串中查找一个数字,并且我知道第一个数字的位置。
有人能帮助我吗?
答案1
假设您正在使用 Db2 11.1,则应该使用 REGEXP_EXTRACT。
例如
values regexp_extract(' STR. 5TH PALACE WASHINGTONN, 15','\b[0-9]+\b')
返回
1
--
15
答案2
解决方案 1
一个或多个数字后面没有非空格字符。
请参阅REGEXP_SUBSTR描述。
select str, regexp_substr(str, '[\d]+(?![^\s])') num
from table(values
'STR. WASHINGTONN 15'
, 'STR. WASHINGTONN, 15'
, 'STR. WASHINGTONN NR. 15'
, 'STR. 5TH PALACE WASHINGTONN, 15'
) t(str);
顺便说一句:
似乎负面后视 (?<![^\s])[\d]+(?![^\s])
(一个或多个数字前面没有非空格,后面也没有非空格)至少在我的 IBM i 的 DB2 7.3 上不起作用,但在 Db2 11.1 上起作用。
解决方案 2
如果前瞻/后瞻正则表达式功能不起作用,我们会在字符串的两侧添加空格:
select str, trim(regexp_substr(' '||str||' ', '\s[\d]+\s')) num
from table(values
'STR. WASHINGTONN 15'
, 'STR. WASHINGTONN, 15'
, 'STR. WASHINGTONN NR. 15'
, 'STR. 5TH PALACE WASHINGTONN, 15'
) t(str);