rt
把一个字段可能包含有手机号查询出来,不要重复的,急急急
不用太复杂的验证首字母是1,11位的就行

解决方案 »

  1.   

    select num from tab
    where len(num)=11
      

  2.   

    select * from tb 
    where len(col)=11 and left(col,1)=1
      

  3.   

    select distinct 字段 from 表名 where 字段 like '1[3,5,8][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 
      

  4.   

    select distinct 字段 from 表名 where 字段 like '%1[3,5,8][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%'  
      

  5.   


    把上面的改了一下,你试试:select distinct 字段 from 表名 where 字段 like '%1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%' 
      

  6.   


    -試試以下:
    WITH a1 (phone_no) AS
    (
    SELECT '王明13889887645'  UNION all
    SELECT '13823432123李刚'
    )
    SELECT DISTINCT SUBSTRING(phone_no,CHARINDEX('1',phone_no),11) phone_no
    FROM a1
      

  7.   

    笨人想出来的笨办法
    ;WITH CTE(字段)
    AS
    (
      SELECT '王明13889887645'
      UNION ALL
      SELECT '13823432123李刚'
      UNION ALL
      SELECT '王明13889887645李刚'
      UNION ALL
      SELECT '王明23889887645李刚'
    )
    SELECT 字段,查找结果=CASE
    WHEN patindex('%[^0-9]1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',','+字段+',')=0
    THEN '未找到满足条件的手机号'
    ELSE SUBSTRING(字段,patindex('%[^0-9]1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',','+字段+','),11)
    END
    FROM CTE
    /*
    字段 查找结果
    王明13889887645 13889887645
    13823432123李刚 13823432123
    王明13889887645李刚 13889887645
    王明23889887645李刚 未找到满足条件的手机号
    */
    ;WITH CTE(字段)
    AS
    (
      SELECT '王明13889887645'
      UNION ALL
      SELECT '13823432123李刚'
      UNION ALL
      SELECT '王明13889887645李刚'
      UNION ALL
      SELECT '王明23889887645李刚'
    ),
    CTE2 AS
    (
      SELECT 查找结果=CASE
    WHEN patindex('%[^0-9]1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',','+字段+',')=0
    THEN '未找到满足条件的手机号'
    ELSE SUBSTRING(字段,patindex('%[^0-9]1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',','+字段+','),11)
    END
      FROM CTE
    )
    SELECT DISTINCT 查找结果
    FROM CTE2 WHERE 查找结果<>'未找到满足条件的手机号'
    /*
    查找结果
    13823432123
    13889887645
    */
      

  8.   

    DECLARE @a TABLE(a VARCHAR(20))
    INSERT @a SELECT '王明13889887645'
    UNION ALL SELECT '13823432123李刚'
    UNION ALL SELECT '王明13889887645李刚'
    UNION ALL SELECT '王明23889887645李刚'
    UNION ALL SELECT '13823432123'
    UNION ALL SELECT NULL 
    UNION ALL SELECT '13'SELECT * FROM 
    (
    SELECT SUBSTRING(a,PATINDEX('%[0-9]%',a),LEN(a)-PATINDEX('%[0-9]%',REVERSE(a))+1- PATINDEX('%[0-9]%',a)+1)   x
    FROM @a 
    WHERE isnull(a,'')<>''
    )aa 
    WHERE LEN(x)=11 AND LEFT(x,1)=1
    --Result
    /*
    x                    
    -------------------- 
    13889887645
    13823432123
    13889887645
    13823432123(所影响的行数为 4 行)
    */
      

  9.   


    ;WITH CTE(字段)
    AS
    (
      SELECT '王明13889887645'
      UNION ALL
      SELECT '13823432123李刚'
      UNION ALL
      SELECT '王明13889887645李刚'
      UNION ALL
      SELECT '王明23889887645李刚'
    )
    ,CTE2 as
    (
    select distinct 字段 from CTE where 字段 like '%1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%' 
    )
    ,CTE3 as
    (
    select substring(字段,CHARINDEX('1',字段),LEN(字段)-CHARINDEX('1',字段)+1) as 字段 from CTE2
    )
    select left(字段,11) as 字段 from CTE3
      

  10.   

    我的也不对?那你的数据到底什么样的,我就是按照你给的“ ‘王明13889887645’,或者‘13823432123李刚’ ”写的SQL啊,还带测试结果的
      

  11.   

    这样写我觉得有几个问题:
    1.先对整个字段做DISTINCT似乎没有意义吧,先做DISTINCT最后得到的手机号仍然可能是重复的,如字段里有“王明13889887645”和“王明13889887645李刚”
    2.如果有超过11位数字,也会从中截取出可能的手机号,如“213889887645”,当然这个看楼主的具体要求了
    3.最重要的是如果存在类似“王明1李13889887645李刚”这样的数据,你会找到“1李138898876”
      

  12.   

    这样写我觉得有几个问题:
    1.先对整个字段做DISTINCT似乎没有意义吧,先做DISTINCT最后得到的手机号仍然可能是重复的,如字段里有“王明13889887645”和“王明13889887645李刚”
    2.如果有超过11位数字,也会从中截取出可能的手机号,如“213889887645”,当然这个看楼主的具体要求了
    3.最重要的是如果存在类似“王明1李13889887645李刚”这样的数据,你会找到“1李138898876”你指出的问题说的很对。
    1.distict最后可以加在最后一句,可以去除重复的手机号
    2.手机号是不会超过11位的,当然会有特殊的情况
    3.名字后面是不允许有数字
    最后你指出的问题很对,碰到很特殊的情况这写法的确有问题
      

  13.   

    这样写我觉得有几个问题:
    1.先对整个字段做DISTINCT似乎没有意义吧,先做DISTINCT最后得到的手机号仍然可能是重复的,如字段里有“王明13889887645”和“王明13889887645李刚”
    2.如果有超过11位数字,也会从中截取出可能的手机号,如“213889887645”,当然这个看楼主的具体要求了
    3.最重要的是如果存在类似“王明1李13889887645李刚”这样的数据,你会找到“1李138898876”
    谢谢你指出我的问题。。