打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
oracle pl/sql level妙用

1、当需要把一个字符串按某一分隔符分隔后,变为数据列,即把字符串行变为列,可以使用level关键字,例子:

 

  1. with t as  
  2.  (select 'a;b;c;d;e' as str from dual)  
  3. select level,  
  4.        t.str,  
  5.        substr(t.str, 2 * (level - 1) + 1, 1) as str_signle  
  6.   from t  
  7. connect by level <= length(t.str) - length(replace(t.str, ';''')) + 1;  

 

运行结果:

 

2、上面的写法只是适用于一般有规律的字符串行,当遇到不规则字符串行时,可以使用oracle的正则表达式函数,请看下面的例子:

 

  1. with t as  
  2.  (select 'i;am;a;test;hahahhah' as str from dual)  
  3. select level,  
  4.        str,  
  5.        regexp_substr(t.str, '[^;]+', 1, level) str_single  
  6.   from t  
  7. connect by level <= length(t.str) - length(replace(t.str, ';''')) + 1;  

 

运行结果:

或者不使用正则表达式:

 

  1. with t_org as  
  2.  (select 'I am a complicated string' as str from dual),  
  3. t_sep as  
  4.  (select ' ' as sep from dual),  
  5. as  
  6.  (select t_org.str as orign_str,  
  7.          t_sep.sep || t_org.str || t_sep.sep as str  
  8.     from t_org,  
  9.          t_sep)  
  10. select level,  
  11.        t.orign_str,  
  12. /*     instr(t.str, t_sep.sep, 1, levelas separator_postion,  
  13.        instr(t.str, t_sep.sep, 1, level) + 1 as str_postion_begin,  
  14.        instr(t.str, t_sep.sep, 1, level + 1) -  
  15.        instr(t.str, t_sep.sep, 1, level) - 1 as str_single_len,*/  
  16.        substr(t.str, instr(t.str, t_sep.sep, 1, level) + 1, instr(t.str, t_sep.sep, 1, level + 1) -  
  17.                instr(t.str, t_sep.sep, 1, level) - 1) as str_signle  
  18.   from t,  
  19.        t_sep  
  20. connect by level < length(t.str) - length(replace(t.str, t_sep.sep, ''));  

 

运行结果:


 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
在 Oracle 中使用正则表达式
Oracle解析逗号分隔的字符串,或者01110110101此类数据
oracle pl/sql split函数
Oracle经典实用SQL语句--查询小数部分位数
程序员面试攻略 6.2 面试例题:字符串的全排列
一个通用的字符串检测方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服