我在我的字段中有这个值,其中有5个段,例如100-200-300-400-500
。
如何查询仅检索前3段?这意味着查询结果将显示为100-200-300
。
答案 0 :(得分:2)
与SUBSTR
相比,旧INSTR
和REGEXP
的速度更快,CPU占用更少。
SQL> WITH DATA AS(
2 SELECT '100-200-300-400-500' str FROM dual
3 )
4 SELECT substr(str, 1, instr(str, '-', 1, 3)-1) str
5 FROM DATA
6 /
STR
-----------
100-200-300
SQL>
以上SUBSTR
和INSTR
查询使用逻辑来查找3rd
“ - hyphen
次出现,然后从position 1
获取子字符串直到'-'
的第三次出现。
答案 1 :(得分:1)
((\d)+-(\d)+-(\d)+)
如果此序列的位置是任意的,您可以选择 REG ular EXP ressions
select regexp_substr(
'Test-Me 100-200-300-400-500 AGain-Home',
'((\d)+-(\d)+-(\d)+)'
) As Result
from dual
RESULT
-----------
100-200-300
否则简单SUBSTR
将执行
答案 2 :(得分:-1)
你有牵引方式,第一个是子串。
第二个很快,我们就是这样的REGEXP。
REGEXP_SUBSTR('100-200-300-400-500','[[:digit:]]{3}-[[:digit:]]{3}-[[:digit:]]{3}')"REGEXPR_SUBSTR" FROM DUAL;