oracle sql 正则表达式替换字符

penny9093 2014-07-23 03:12:13
比如:座12#:座子凳子...,我想要将12替换成17,这样的数据大概有几百条,所以想在数据库里用正则表达式做,正则表达式改怎么写?
...全文
718 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CT_LXL 2014-07-24
  • 打赏
  • 举报
回复
引用 7 楼 penny9093 的回复:
[quote=引用 6 楼 zlloct 的回复:] [quote=引用 5 楼 penny9093 的回复:] [quote=引用 4 楼 zlloct 的回复:] [quote=引用 2 楼 penny9093 的回复:] 求高手赐教,不胜感激
有点改动:
with t as
 (select 'sas12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1, '(^|[^[:digit:]])12([^[:digit:]]|$)', '17') from t;
[/quote] 谢谢,但是有个问题啊,要替换的数字前面的内容没了, 您能不能顺便给我讲解讲解[/quote] 什么叫做"要替换的数字前面的内容没了"[/quote] 座12#:座子凳子... 替换完之后应该是: 座17#:座子凳子...,但是现在的结果是: 17#:座子凳子... ,第一个座字没了[/quote]
with t as
 (select 'ss12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1,'(^|[^[:digit:]])12([^[:digit:]]|$)','\117\2') from t;
  • 打赏
  • 举报
回复

select regexp_replace(c1,'(^|[^[:digit:]])12([^[:digit:]])','\117\2') from t;
  • 打赏
  • 举报
回复

select replace(c1,'12#','17#') from t;
penny9093 2014-07-24
  • 打赏
  • 举报
回复
引用 6 楼 zlloct 的回复:
[quote=引用 5 楼 penny9093 的回复:] [quote=引用 4 楼 zlloct 的回复:] [quote=引用 2 楼 penny9093 的回复:] 求高手赐教,不胜感激
有点改动:
with t as
 (select 'sas12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1, '(^|[^[:digit:]])12([^[:digit:]]|$)', '17') from t;
[/quote] 谢谢,但是有个问题啊,要替换的数字前面的内容没了, 您能不能顺便给我讲解讲解[/quote] 什么叫做"要替换的数字前面的内容没了"[/quote] 座12#:座子凳子... 替换完之后应该是: 座17#:座子凳子...,但是现在的结果是: 17#:座子凳子... ,第一个座字没了
CT_LXL 2014-07-24
  • 打赏
  • 举报
回复
引用 5 楼 penny9093 的回复:
[quote=引用 4 楼 zlloct 的回复:] [quote=引用 2 楼 penny9093 的回复:] 求高手赐教,不胜感激
有点改动:
with t as
 (select 'sas12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1, '(^|[^[:digit:]])12([^[:digit:]]|$)', '17') from t;
[/quote] 谢谢,但是有个问题啊,要替换的数字前面的内容没了, 您能不能顺便给我讲解讲解[/quote] 什么叫做"要替换的数字前面的内容没了"
penny9093 2014-07-24
  • 打赏
  • 举报
回复
引用 4 楼 zlloct 的回复:
[quote=引用 2 楼 penny9093 的回复:] 求高手赐教,不胜感激
有点改动:
with t as
 (select 'sas12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1, '(^|[^[:digit:]])12([^[:digit:]]|$)', '17') from t;
[/quote] 谢谢,但是有个问题啊,要替换的数字前面的内容没了, 您能不能顺便给我讲解讲解
CT_LXL 2014-07-24
  • 打赏
  • 举报
回复
引用 11 楼 kuaileyangle 的回复:
[quote=引用 10 楼 zlloct 的回复:] [quote=引用 7 楼 penny9093 的回复:] [quote=引用 6 楼 zlloct 的回复:] [quote=引用 5 楼 penny9093 的回复:] [quote=引用 4 楼 zlloct 的回复:] [quote=引用 2 楼 penny9093 的回复:] 求高手赐教,不胜感激
有点改动:
with t as
 (select 'sas12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1, '(^|[^[:digit:]])12([^[:digit:]]|$)', '17') from t;
[/quote] 谢谢,但是有个问题啊,要替换的数字前面的内容没了, 您能不能顺便给我讲解讲解[/quote] 什么叫做"要替换的数字前面的内容没了"[/quote] 座12#:座子凳子... 替换完之后应该是: 座17#:座子凳子...,但是现在的结果是: 17#:座子凳子... ,第一个座字没了[/quote]
with t as
 (select 'ss12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1,'(^|[^[:digit:]])12([^[:digit:]]|$)','\117\2') from t;
[/quote] 版主,regexp_replace(c1,'(^|[^[:digit:]])12([^[:digit:]]|$)','\117\2') 能给解释一下第三项的 "\1" "\2”是什么意思?[/quote] 反向引用表达式(^|[^[:digit:]])和([^[:digit:]]|$)
penny9093 2014-07-24
  • 打赏
  • 举报
回复
引用 9 楼 z_shousi 的回复:

select regexp_replace(c1,'(^|[^[:digit:]])12([^[:digit:]])','\117\2') from t;
[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/81.gif] 谢谢,结果是对的,能稍微解释下不?
现在 2014-07-24
  • 打赏
  • 举报
回复
引用 10 楼 zlloct 的回复:
[quote=引用 7 楼 penny9093 的回复:] [quote=引用 6 楼 zlloct 的回复:] [quote=引用 5 楼 penny9093 的回复:] [quote=引用 4 楼 zlloct 的回复:] [quote=引用 2 楼 penny9093 的回复:] 求高手赐教,不胜感激
有点改动:
with t as
 (select 'sas12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1, '(^|[^[:digit:]])12([^[:digit:]]|$)', '17') from t;
[/quote] 谢谢,但是有个问题啊,要替换的数字前面的内容没了, 您能不能顺便给我讲解讲解[/quote] 什么叫做"要替换的数字前面的内容没了"[/quote] 座12#:座子凳子... 替换完之后应该是: 座17#:座子凳子...,但是现在的结果是: 17#:座子凳子... ,第一个座字没了[/quote]
with t as
 (select 'ss12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1,'(^|[^[:digit:]])12([^[:digit:]]|$)','\117\2') from t;
[/quote] 版主,regexp_replace(c1,'(^|[^[:digit:]])12([^[:digit:]]|$)','\117\2') 能给解释一下第三项的 "\1" "\2”是什么意思?
CT_LXL 2014-07-23
  • 打赏
  • 举报
回复
引用 2 楼 penny9093 的回复:
求高手赐教,不胜感激
有点改动:
with t as
 (select 'sas12#sdf:' c1
    from dual
  union all
  select '12sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:12' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1, '(^|[^[:digit:]])12([^[:digit:]]|$)', '17') from t;
CT_LXL 2014-07-23
  • 打赏
  • 举报
回复
引用 2 楼 penny9093 的回复:
求高手赐教,不胜感激
with t as
 (select 'sas12#sdf:' c1
    from dual
  union all
  select 'sas13df:' c1
    from dual
  union all
  select 'sas1#2sdf:' c1
    from dual
  union all
  select 'sas1#asd2312sdf:' c1
    from dual)
select regexp_replace(c1, '[^[:digit:]]12[^[:digit:]]', '17') from t;
penny9093 2014-07-23
  • 打赏
  • 举报
回复
求高手赐教,不胜感激

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧