我想检索两个字符串之间的数字序列。文本中可能还有其他数字,我只想获取“ item”和“ n”(首次出现)之间的顺序。而且,序列的长度可以变化。
以下是我尝试过的:
SELECT REGEXP_SUBSTR(clob_text, 'item ([0-9]+?) n') AS my_number FROM my_table WHERE something = something;
但是它返回值“ item 123456789 n”,我只需要数字值。
我也尝试过返回相同的正则表达式'\ item([0-9] +?)\ n'和'(?= item)([0-9] +?)(?= n) '和'\ item /([0-9] +?)/ \ n',则不返回任何内容。
最后,我尝试插入表达式,它可以工作,但并不理想:
SELECT REGEXP_SUBSTR(REGEXP_SUBSTR(clob_text, '\item ([0-9]+?) \n'), '[0-9]+') FROM ...
如何删除这些不需要的字符,使结果只有一个表达式,结果只有“ 123456789”?
示例输入: 'Somdasdas dasd sdaisdjas asod dasdhjs 1564,dasdohndsdias sdasdasdasdasds, ddissd ksdnas滑动为5645 sdnaslndas,ndsadn ndasknd dnsd:sdas 5465 asdasd dnaskldnas ojsd(dasdksdas)asdklhasdas dsd。 isdjasdsdpoojs asdasdasdasdsad 46564 iasdonsoi sdjosd kjlsdk kkpnasd项目12345879não-existenteda lista 14 sdasdnsd jdspka 2564 sadasds。'
预期输出: '12345879'
答案 0 :(得分:2)
这是您问题的正则表达式:
REGEXP_SUBSTR('<your string>', '\item ([0-9]*?) \n', 1, 1, null, 1)
用法:
查询实际数据并输出:
SELECT
REGEXP_SUBSTR('Somdasdas dasd sdaisdjas asod dasdhjs 1564, dasdohndsdias sdasdasdasdasds, ddissd ksdnas skid as 5645 sdnaslndas, ndsadn ndasknd dnsd: sdas 5465 asdasd dnaskldnas ojsd (dasdksdas) asdklhasdas dsd. isdjasdsdpoojs asdasdasdasdsad 46564 iasdonsoi sdjosd kjlsdk kkpnasd item 12345879 não-existente da lista 14 sdasdnsd jdspka 2564 sadasds'
, '\item ([0-9]*?) \n', 1, 1, null, 1) as MY_STRING
FROM
DUAL;
Output:
MY_STRIN
--------
12345879
干杯!
答案 1 :(得分:0)
假设您一直在寻找2个字符串之间嵌入的单个数字
regexp_substr('item 123456789 n','[^0-9]+([0-9]+)[^0-9]+',1,1,null,1)
--^anything ^1 or more first match^
-- other than a digits
-- digit occurring
-- one or more times.
答案 2 :(得分:0)