根据分号或者逗号来划分第一个有效的11位电话号码

liao_1000 2014-10-14 04:45:23
求助:
a表里面一个字段phone用来存储电话和固话,
oracle能否根据分号或者逗号来划分第一个有效的11位电话号码,固定电话排除。

13543364231;15989213791--中文分号,只取第一个13543364231
13138712139;2886905 --中文分号,取第一个13138712139
2871132;13686737699 --中文分号,取第二个13686737699
2211389/15818911218 ---斜杠号,取第二个15818911218
2295047,13413330936 --英文逗号,取第二个13413330936
2870810,13686736353 ---中文逗号,取第二个13686736353


...全文
551 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bw555 2014-10-15
  • 打赏
  • 举报
回复
SQL> with t as
  2   (select '13543364231;15989213791' str
  3      from dual
  4    union all
  5    select '13138712139;2886905' str
  6      from dual
  7    union all
  8    select '2871132;13686737699' str
  9      from dual
 10    union all
 11    select '2211389/15818911218' str
 12      from dual
 13    union all
 14    select '2295047,13413330936' str
 15      from dual
 16    union all
 17    select '2870810,13686736353' str
 18      from dual)
 19  select regexp_substr(str,'[0-9]{11}',1,1) N from T;

N
------------------------------------------------
13543364231
13138712139
13686737699
15818911218
13413330936
13686736353

已选择6行。
bw555 2014-10-15
  • 打赏
  • 举报
回复
以上语句支持任何间隔符,只要间隔符不是数字就可以
bw555 2014-10-15
  • 打赏
  • 举报
回复
with t as
 (select '13543364231;15989213791' str
    from dual
  union all
  select '13138712139;2886905' str
    from dual
  union all
  select '2871132;13686737699' str
    from dual
  union all
  select '2211389/15818911218' str
    from dual
  union all
  select '2295047,13413330936' str
    from dual
  union all
  select '2870810,13686736353' str
    from dual)
SELECT DECODE(LENGTH(N1),11,N1,N2) N FROM
(select regexp_substr(str,'[0-9]+',1,1) N1,regexp_substr(str,'[0-9]+',1,2) N2 from T)


N
------------------------------------------------
13543364231
13138712139
13686737699
15818911218
13413330936
13686736353

已选择6行。
CT_LXL 2014-10-14
  • 打赏
  • 举报
回复
引用 楼主 liao_1000 的回复:

with t as
 (select '13543364231;15989213791' str
    from dual
  union all
  select '13138712139;2886905' str
    from dual
  union all
  select '2871132;13686737699' str
    from dual
  union all
  select '2211389/15818911218' str
    from dual
  union all
  select '2295047,13413330936' str
    from dual
  union all
  select '2870810,13686736353' str
    from dual)
select decode(regexp_instr(str, '(;|;|/|,|,)'),
              12,
              substr(str, 1, 11),
              substr(str, regexp_instr(str, '(;|;|/|,|,)') + 1))
  from t;
阿巴库克 2014-10-14
  • 打赏
  • 举报
回复
给你个思路吧 先用替换函数TRANSLATE 替换分隔符为 统一字符 如 / ,然后 再进行拆分;我以前是用excel拆分的 - - 然后就可以提取了;不知道数据量有多大?phone字段确定只有两组号码吗?我遇到过乱起八糟的都有 - -
类C语言词法分析器设计 一、问题描述 词法分析器是编译工作的第一个阶段,主要完成对源程序的扫描,从而将源程序转换成单词序列,作为第二阶段语法分析的输入。 二、需求分析 1、 预处理:过滤掉跳格符、回车符、换行符等编辑性字符。将多个连续的空格合并成一个空格。过滤注释。 2、 单词符号的识别,将每个单词符号进行不同类别的划分。单词符号可划分成5种。 (1) 关键字:如if、else、while、int、float等。 (2) 标识符:用户自己定义的名字,常量名、变量名和过程名。 (3) 常数:各种类型的常数 (4) 运算符:如+、-、*、<、>、>=等。 (5) 届符:如逗号分号、括号等。 3、 最后将所有的单词符号转化为便于计算机处理的机内码形式 4、 用户界面使用图形化界面 三、概要设计 1、 字符集说明:本词法分析演示的是C语言的一个子集,字符集如下: (1) 关键字:int,long,float,double,char,short,void,if,else,for,while,do,break,switch, continue,case,default,return,static,struct (2) 运算符:+,-,*,/,%,>,<,=,!=,==,<=,>=,++,--,!,&,&&,||,[] (3) 界符:,,;,{,},(,),:,’,”,# (4) 标识符:以字母开头的字母数字串。 (5) 常数:整型或浮点型。 2、 字符集的内编码形式: ..................................... .....................................

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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