我需要选择两个点之间的字符串值。(点包括)给定abc.musadeneme.dce,我需要.musadeneme.我需要你的帮助,谢谢。
abc.musadeneme.dce
.musadeneme.
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。如果有更多的点,则只返回第一个用点括起来的子字符串,因为问号使匹配项变得非贪婪(在遇到的第一个匹配项处停止)。
6l7fqoea2#
您可以使用SUBSTR和INSTR(这比正则表达式快得多):
SUBSTR
INSTR
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
um6iljoc3#
使用instr和substr函数,我们可以实现这一点。
instr
substr
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;
3条答案
按热度按时间ibps3vxo1#
给定您的确切规格,使用REGEXP_SUBSTR的此解决方案可以做到这一点。匹配一个文本点,后跟所有字符,直到并包括下一个文本点。注意,'WITH'子句只定义测试数据集,就像本例中的临时表。
如果没有找到匹配项,REGXP_SUBSTR将返回NULL。如果有更多的点,则只返回第一个用点括起来的子字符串,因为问号使匹配项变得非贪婪(在遇到的第一个匹配项处停止)。
6l7fqoea2#
您可以使用
SUBSTR
和INSTR
(这比正则表达式快得多):其中,对于示例数据:
输出:
| 匹配|
| - -|
| 穆萨代内米|
fiddle
um6iljoc3#
使用
instr
和substr
函数,我们可以实现这一点。