各位大侠,oracle sql问题,在字符串中截取姓名。

如字符串:“张三|手机号码|地址<br>李四|手机号码|地址<br><br>王五|手机号码|地址<br>........”在这个字符串中需要提取张三,李四,王五等姓名
“张三|手机号码|地址<br>李四|手机号码|地址<br>王五|手机号码|地址<br>...”后面省略号表示依然还有这样的......
最新回答
初逝的格调シ

2024-04-17 01:28:56

FUNCTION SPLIT(STR IN VARCHAR2, SEPARATOR IN VARCHAR2) RETURN VARARRAY IS
V_TOKENS VARARRAY;
V_OCCURR INTEGER := 1;
V_POS INTEGER := 0;
V_CNT INTEGER := 1;
I INTEGER := 1;
BEGIN
IF (INSTR(STR, SEPARATOR) <> 0 AND (INSTR(STR, SEPARATOR) IS NOT NULL)) THEN
WHILE (INSTR(STR, SEPARATOR, 1, V_OCCURR) > 0) LOOP
V_POS := INSTR(STR, SEPARATOR, 1, V_OCCURR);
V_TOKENS(V_CNT) := SUBSTR(STR, I, V_POS - I);
V_OCCURR := V_OCCURR + 1;
V_CNT := V_CNT + 1;
I := V_POS + 1;
END LOOP;
V_TOKENS(V_CNT) := SUBSTR(STR, I, LENGTH(STR));
ELSE
V_TOKENS(V_CNT) := STR;
END IF;
RETURN V_TOKENS;
END SPLIT;

V_SPLIT := SPLIT(‘张三|手机号码|地址<br>李四|手机号码|地址<br>王五|手机号码|地址<br>’, '<br>');

这个方法嵌套一下就可以满足你的要求了,希望对你有帮助
假扮的天使

2024-04-17 04:56:17

with t1 as ( select 1 c1,'张三|手机号码|地址<br>李四|手机号码|地址<br><br>王五|手机号码|地址<br>' c2 from dual )
select substr(c2,1,instr(c2,'|',1)-1) from (
select distinct c1,replace(regexp_substr(c2,'[^<br>]+',1,level),'<br>',' ') c2 from t1
connect by level<=length(c2)-length(replace(c2,'<br>',''))+1 order by c1
)
菇凉我万分华丽

2024-04-17 06:07:28

使用字符串分隔函数。
先按照<br>分隔,再按照|分隔,取分隔后的第一个字符串。
这里有分隔的示例:
http://www.cr173.com/html/18046_1.html
陌上柳絮倾城雪

2024-04-17 11:02:32

写语句提就看看:
http://www.blogjava.net/sy1214520/archive/2010/01/07/308540.html
,如果写程序的话更好提。。总的来说就是用正则表达式匹配(汉字)(数字)然后取汉字这个分组就可以了。。另一种思路就是截取前三个字,然后用空格把截取出来的数字代替了
落花ぴ满天飞

2024-04-17 04:56:59

我一般是想办法从数据库中提取,你的意思是从这段SQL语句中提取出来吗?如果是的话,你可能需要编点东西来做解析了
桃靥

2024-04-17 12:22:49

直接用sql写不出来,需要自己定义函数来解决。