如何在Oracle中提取字符串
我想在Oracle中提取以下字符串。我该怎么做如何在Oracle中提取字符串,oracle,regexp-substr,Oracle,Regexp Substr,我想在Oracle中提取以下字符串。我该怎么做 原始字符串:011113584378(+)卡,职员 预期字符串:员工卡 我想您有编写PL/SQL函数的特权吧?然后只需使用、和/或和|解析您的输入 以下是一个例子: …该字段可能包含以下值: F:\Siebfile\YD\S\u SR\u ATT\u 1-60SS\u 1-AM3L.SAF 在这种情况下,我需要返回'1-60SS'的值,因为这是位于第3和第4个下划线之间的值 解决方案: create or replace function pa
- 原始字符串:
011113584378(+)卡,职员
- 预期字符串:
员工卡
- 我想您有编写PL/SQL函数的特权吧?然后只需使用、和/或和
|
解析您的输入
以下是一个例子:
…该字段可能包含以下值:
F:\Siebfile\YD\S\u SR\u ATT\u 1-60SS\u 1-AM3L.SAF
在这种情况下,我需要返回'1-60SS'的值,因为这是位于第3和第4个下划线之间的值
解决方案:
create or replace function parse_value (pValue varchar2)
return varchar2
is
v_pos3 number;
v_pos4 number;
begin
/* Return 3rd occurrence of '_' */
v_pos3 := INSTR (pValue, '_', 1, 3) + 1;
/* Return 4rd occurrence of '_' */
v_pos4 := INSTR (pValue, '_', 1, 4);
return SUBSTR (pValue, v_pos3, v_pos4 - v_pos3);
end parse_value;
我想您有编写PL/SQL函数的特权吧?然后只需使用、和/或和
|
解析您的输入
以下是一个例子:
…该字段可能包含以下值:
F:\Siebfile\YD\S\u SR\u ATT\u 1-60SS\u 1-AM3L.SAF
在这种情况下,我需要返回'1-60SS'的值,因为这是位于第3和第4个下划线之间的值
解决方案:
create or replace function parse_value (pValue varchar2)
return varchar2
is
v_pos3 number;
v_pos4 number;
begin
/* Return 3rd occurrence of '_' */
v_pos3 := INSTR (pValue, '_', 1, 3) + 1;
/* Return 4rd occurrence of '_' */
v_pos4 := INSTR (pValue, '_', 1, 4);
return SUBSTR (pValue, v_pos3, v_pos4 - v_pos3);
end parse_value;
好的,我咬一口。本例使用REGEXP_REPLACE来描述字符串,保存所需的部分,以便在返回它们之前重新排列它们。如果您展示一些您正在处理的数据的真实示例,会更好,因为我只能保证这个示例将使用您提供的一行代码 正则表达式匹配从字符串开头开始并以空格结尾的任何字符。下一组任何字符(最多不包括逗号空格)将通过将其包含在括号中来“记住”。这就是所谓的俘获群。下一个捕获的组是逗号空格分隔符之后直到行尾(美元符号)的字符集。捕获的组按从左到右的顺序引用。第三个参数是要返回的字符串,它是按顺序捕获的第二个和第一个组,由空格分隔
SQL> with tbl(str) as (
select '+011113584378(+) CARD, STAFF' from dual
)
select regexp_replace(str, '^.*\) (.*), (.*)$', '\2 \1') formatted
from tbl;
FORMATTED
----------
STAFF CARD
SQL>
好的,我咬一口。本例使用REGEXP_REPLACE来描述字符串,保存所需的部分,以便在返回它们之前重新排列它们。如果您展示一些您正在处理的数据的真实示例,会更好,因为我只能保证这个示例将使用您提供的一行代码 正则表达式匹配从字符串开头开始并以空格结尾的任何字符。下一组任何字符(最多不包括逗号空格)将通过将其包含在括号中来“记住”。这就是所谓的俘获群。下一个捕获的组是逗号空格分隔符之后直到行尾(美元符号)的字符集。捕获的组按从左到右的顺序引用。第三个参数是要返回的字符串,它是按顺序捕获的第二个和第一个组,由空格分隔
SQL> with tbl(str) as (
select '+011113584378(+) CARD, STAFF' from dual
)
select regexp_replace(str, '^.*\) (.*), (.*)$', '\2 \1') formatted
from tbl;
FORMATTED
----------
STAFF CARD
SQL>
为什么有人需要编写PL/SQL函数来使用SUBSTR和INSTR?为什么有人需要编写PL/SQL函数来使用SUBSTR和INSTR?从输入到输出的逻辑是什么?格式是否始终为空格逗号空格?字母序列是否总是非空的?它们只是字母,还是也可以包含破折号(-)或下划线(_)或数字?在我们考虑任何类型的代码之前,请澄清逻辑。从输入到输出的逻辑是什么?格式是否始终为空格逗号空格?字母序列是否总是非空的?它们只是字母,还是也可以包含破折号(-)或下划线(_)或数字?在我们考虑任何类型的代码之前,请澄清逻辑。