我想知道是否有更好,更优的方法从字符串中检索数字 例如
"O5_KK/text1/1239312/006_textrandom"
"O5_KK/text1/1239315/0109_textrandom123"
"O5_KK/text1/1239318/0110_textrandom432"
'O5_KK/text1' - hardcoded, never change.
1239312,1239315,1239318 - random number, unique within row
textrandom,textrandom123,textrandom432 - random string
作为输出我想只得到数字:
006
0109
0110
我知道如何使用instr,substr,replace函数来完成它。但看起来很糟糕。我正在寻找其他解决方案,任何提示?
由于
答案 0 :(得分:5)
您可以使用regexp_subtr()
:
select regexp_substr(val, '/[0-9]+_', 1, 1)
然后删除多余的字符:
select replace(replace(regexp_substr(val, '/[0-9]+_', 1, 1), '/', ''), '_', '')
答案 1 :(得分:1)
这只是第二个下划线之前的第三个斜杠之后的部分:
substr(str, instr(str, '/', 1, 3) + 1, instr(str, '_', 1, 2) - instr(str, '/', 1, 3) - 1)
答案 2 :(得分:1)
假设您需要的数字始终位于最后一个斜杠(/)和最后一个下划线(_)之间,而中间没有任何字符 - 就像您的样本中一样 - 最佳解决方案仅使用substr和instr。请注意,正则表达式比直接子行和instr慢;有些情况下,唯一的解决方案是regexpr(或者regexpr更容易编写和维护),但这不是其中之一。
select substr(val, instr(val,'/',-1)+1, instr(val,'_',-1)-instr(val,'/',-1)-1)