解决方案 1

解决方案 1

我需要在 DB2 SQL 中的字符串中查找一个数字,并且我知道第一个数字的位置。

有人能帮助我吗?

答案1

假设您正在使用 Db2 11.1,则应该使用 REGEXP_EXTRACT。

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061492.html

例如

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);

答案3

你可能感兴趣定位或者正则表达式函数,但从给出的信息来看确实很难判断。REGEXP_INSTR 相对较新,因此您需要检查它是否在您的平台上的 Db2 版本中可用。

相关内容