从 Oracle 中的字符串中提取特定的数据集
Extract Specific Set of data from a String in Oracle
我有字符串'1_A_B_C_D_E_1_2_3_4_5',我正在尝试提取数据'A_B_C_D_E '.我正在尝试从字符串中删除 _1_2_3_4_5 和 1_ 部分。这实际上是字符串中的数字部分。最后一个字母表之后的任何特殊字符也必须删除。在此示例中,字符 E 之后的 _ 也不得存在。
我正在尝试的查询如下
SELECT
REGEXP_SUBSTR('1_A_B_C_D_E_1_2_3_4_5','[^0-9]+',1,1)
from dual
我从上面的查询中得到的数据如下:-
_A_B_C_D_E_
我正在想办法在最后删除下划线。还有其他方法可以解决这个问题吗?
假设 "letters" 先出现,然后 "digits",你可以这样做:
select regexp_substr('A_B_C_D_E_1_2_3_4_5','.*[A-Z]') from dual;
这将从字符串的开头提取所有字符,直到字符串中的最后一个 upper-case 字母(.*
是贪婪的,它会尽可能地扩展,同时仍然允许再收到 upper-case 封信来完成比赛)。
I have the string '1_A_B_C_D_E_1_2_3_4_5' and I am trying to extract the data 'A_B_C_D_E'
使用REGEXP_REPLACE:
SQL> SELECT trim(BOTH '_' FROM
2 (REGEXP_SUBSTR('1_A_B_C_D_E_1_2_3_4_5','[0-9]+', ''))) str
3 FROM dual;
STR
---------
A_B_C_D_E
工作原理:
REGEXP_REPLACE
将替换字符串中出现的所有数字 '[0-9]+'。或者,您也可以使用 POSIX 字符 class '[^[:digit:]]+'
TRIM BOTH '_'
将从字符串中删除任何前导和滞后 _
。
同时使用REGEXP_SUBSTR:
SELECT trim(BOTH '_' FROM
(REGEXP_SUBSTR('1_A_B_C_D_E_1_2_3_4_5','[^0-9]+'))) str
FROM dual;
STR
---------
A_B_C_D_E
我有字符串'1_A_B_C_D_E_1_2_3_4_5',我正在尝试提取数据'A_B_C_D_E '.我正在尝试从字符串中删除 _1_2_3_4_5 和 1_ 部分。这实际上是字符串中的数字部分。最后一个字母表之后的任何特殊字符也必须删除。在此示例中,字符 E 之后的 _ 也不得存在。
我正在尝试的查询如下
SELECT
REGEXP_SUBSTR('1_A_B_C_D_E_1_2_3_4_5','[^0-9]+',1,1)
from dual
我从上面的查询中得到的数据如下:-
_A_B_C_D_E_
我正在想办法在最后删除下划线。还有其他方法可以解决这个问题吗?
假设 "letters" 先出现,然后 "digits",你可以这样做:
select regexp_substr('A_B_C_D_E_1_2_3_4_5','.*[A-Z]') from dual;
这将从字符串的开头提取所有字符,直到字符串中的最后一个 upper-case 字母(.*
是贪婪的,它会尽可能地扩展,同时仍然允许再收到 upper-case 封信来完成比赛)。
I have the string '1_A_B_C_D_E_1_2_3_4_5' and I am trying to extract the data 'A_B_C_D_E'
使用REGEXP_REPLACE:
SQL> SELECT trim(BOTH '_' FROM
2 (REGEXP_SUBSTR('1_A_B_C_D_E_1_2_3_4_5','[0-9]+', ''))) str
3 FROM dual;
STR
---------
A_B_C_D_E
工作原理:
REGEXP_REPLACE
将替换字符串中出现的所有数字 '[0-9]+'。或者,您也可以使用 POSIX 字符 class '[^[:digit:]]+'TRIM BOTH '_'
将从字符串中删除任何前导和滞后_
。
同时使用REGEXP_SUBSTR:
SELECT trim(BOTH '_' FROM
(REGEXP_SUBSTR('1_A_B_C_D_E_1_2_3_4_5','[^0-9]+'))) str
FROM dual;
STR
---------
A_B_C_D_E