查看: 1753|回复: 5

正则表达式

[复制链接]
招聘 : 数据工程师
论坛徽章:
92
生肖徽章2007版:鸡
日期:2013-11-12 07:55:03马上有房
日期:2014-02-18 16:42:02马上有钱
日期:2014-04-09 17:17:412014年世界杯参赛球队: 美国
日期:2014-06-28 21:46:122014年世界杯参赛球队:喀麦隆
日期:2014-07-07 10:46:48马上有车
日期:2014-07-21 13:04:39马上加薪
日期:2014-07-29 10:04:19马上有对象
日期:2014-07-29 10:04:53马上有车
日期:2014-07-29 10:04:20马上加薪
日期:2014-08-26 22:26:06
跳转到指定楼层
1#
发表于 2011-3-15 19:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有如下字符串
,aa,,cc,dd
我需要弄成
1 aa
2 null
3 cc
4 dd

SELECT REGEXP_SUBSTR(',aa,,cc,dd', '[^,{1}]+', 1, 2) FROM DUAL

2 cc

上面的却错位了,各位有什么办法?

不允许把,,替换成,null,

在如上的REGEXP_SUBSTR完成..
thanks in advance!
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
2#
发表于 2011-3-15 19:12 | 只看该作者
查看精华区行列转换

使用道具 举报

回复
论坛徽章:
38
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-02-13 15:12:09现任管理团队成员
日期:2011-11-07 09:46:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41ITPUB9周年纪念徽章
日期:2010-10-08 09:31:21版主3段
日期:2012-05-15 15:24:112009新春纪念徽章
日期:2009-01-04 14:52:282010新春纪念徽章
日期:2010-03-01 11:06:202009日食纪念
日期:2009-07-22 09:30:00祖国60周年纪念徽章
日期:2009-10-09 08:28:00
3#
发表于 2011-3-15 21:28 | 只看该作者
with t as (select ',aa,,cc,dd' tt from dual)
select level rn, ltrim(regexp_substr(tt, ',[^,]*', 1, level), ',')
from t
connect by regexp_instr(tt, ',[^,]*', 1, level) > 0

使用道具 举报

回复
论坛徽章:
26
2010年世界杯参赛球队:智利
日期:2010-07-03 17:16:26比亚迪
日期:2014-01-16 17:12:41宝马
日期:2014-01-24 10:32:252014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08马上有对象
日期:2014-03-05 21:30:32马上有车
日期:2014-03-11 16:46:45优秀写手
日期:2014-03-25 05:59:50马上加薪
日期:2014-03-26 16:46:30问答徽章
日期:2014-05-09 16:40:36
4#
发表于 2011-3-15 21:47 | 只看该作者
普通的substr在这里应该更合适:

SELECT id,
       SUBSTR(
               col1,
               INSTR(col1,',',1,id)+1,
               INSTR(col1,',',1,id+1)-INSTR(col1,',',1,id)-1
             ) AS res
FROM
(
  WITH t AS
  (
    SELECT ',aa,,cc,dd'||',' as col1
    FROM dual
  )
  SELECT col1,
         LEVEL id
  FROM t
  CONNECT BY LEVEL<=LENGTH(col1)-
                    LENGTH(REPLACE(col1,','))
                    -1
)


        ID RES
---------- ---------------
         1 aa
         2
         3 cc
         4 dd

使用道具 举报

回复
招聘 : 数据工程师
论坛徽章:
92
生肖徽章2007版:鸡
日期:2013-11-12 07:55:03马上有房
日期:2014-02-18 16:42:02马上有钱
日期:2014-04-09 17:17:412014年世界杯参赛球队: 美国
日期:2014-06-28 21:46:122014年世界杯参赛球队:喀麦隆
日期:2014-07-07 10:46:48马上有车
日期:2014-07-21 13:04:39马上加薪
日期:2014-07-29 10:04:19马上有对象
日期:2014-07-29 10:04:53马上有车
日期:2014-07-29 10:04:20马上加薪
日期:2014-08-26 22:26:06
5#
 楼主| 发表于 2011-3-17 11:40 | 只看该作者
谢谢上面的各位同志,上面的方法都考虑到,我只是想用一个正则来实现。
SELECT REGEXP_SUBSTR(',aa,,cc,dd', '[^,{1}]+', 1, 2) FROM DUAL

这个出来的结果是cc,正则是懒惰表达式,能用什么办法规避,单单通过一个正则表达式来完成?

出来的结果是  ,也就是null

使用道具 举报

回复
论坛徽章:
0
6#
发表于 2011-3-17 14:21 | 只看该作者
原帖由 luyi6101 于 2011-3-17 11:40 发表
谢谢上面的各位同志,上面的方法都考虑到,我只是想用一个正则来实现。
SELECT REGEXP_SUBSTR(',aa,,cc,dd', '[^,{1}]+', 1, 2) FROM DUAL

这个出来的结果是cc,正则是懒惰表达式,能用什么办法规避,单单通过一个正则表达式来完成?

出来的结果是  ,也就是null




REGEXP_SUBSTR(',AA,,CC,DD',',[^,]*',1,2)
----------------------------------------
,                                       
1 row selected.

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表