Oracle SQL,获取2点之间的字符串值

nue99wik  于 2022-11-03  发布在  Oracle
关注(0)|答案(3)|浏览(223)

我需要选择两个点之间的字符串值。(点包括)
给定abc.musadeneme.dce,我需要.musadeneme.
我需要你的帮助,谢谢。

ibps3vxo

ibps3vxo1#

给定您的确切规格,使用REGEXP_SUBSTR的此解决方案可以做到这一点。匹配一个文本点,后跟所有字符,直到并包括下一个文本点。注意,'WITH'子句只定义测试数据集,就像本例中的临时表。

WITH tbl(str) AS (
  SELECT 'abc.musadeneme.dce' FROM dual
)
SELECT REGEXP_SUBSTR(str, '(\..*?\.)') AS middle_string
from tbl;

MIDDLE_STRING
-------------
.musadeneme. 
1 row selected.

如果没有找到匹配项,REGXP_SUBSTR将返回NULL。如果有更多的点,则只返回第一个用点括起来的子字符串,因为问号使匹配项变得非贪婪(在遇到的第一个匹配项处停止)。

6l7fqoea

6l7fqoea2#

您可以使用SUBSTRINSTR(这比正则表达式快得多):

SELECT SUBSTR(
         value,
         INSTR(value, '.', 1, 1),
         INSTR(value, '.', 1, 2) + 1 - INSTR(value, '.', 1, 1)
       ) AS match
FROM   table_name

其中,对于示例数据:

CREATE TABLE table_name (value) AS
SELECT 'abc.musadeneme.dce' FROM DUAL;

输出:
| 匹配|
| - -|
| 穆萨代内米|
fiddle

um6iljoc

um6iljoc3#

使用instrsubstr函数,我们可以实现这一点。

SELECT
    'ab.welcome.bye'                                                               AS inp,
    substr('ab.welcome.bye',
           instr('ab.welcome.bye', '.', 1) + 1,
           (instr('ab.welcome.bye',
                  '.',
                  instr('ab.welcome.bye', '.', 1) + 1)) - instr('ab.welcome.bye', '.', 1) - 1) AS outp
FROM
    dual;

相关问题