从值中检索细分

时间:2014-12-31 03:10:14

标签: sql oracle substr

我在我的字段中有这个值,其中有5个段,例如100-200-300-400-500

如何查询仅检索前3段?这意味着查询结果将显示为100-200-300

3 个答案:

答案 0 :(得分:2)

SUBSTR相比,旧INSTRREGEXP的速度更快,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>

以上SUBSTRINSTR查询使用逻辑来查找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;