select * from tb where len(col)=11 and left(col,1)=1
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]'
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]%'
把上面的改了一下,你试试: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]%'
-試試以下: 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
笨人想出来的笨办法 ;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 */
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 行) */
;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
where len(num)=11
where len(col)=11 and left(col,1)=1
把上面的改了一下,你试试: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]%'
-試試以下:
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
;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
*/
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 行)
*/
;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
1.先对整个字段做DISTINCT似乎没有意义吧,先做DISTINCT最后得到的手机号仍然可能是重复的,如字段里有“王明13889887645”和“王明13889887645李刚”
2.如果有超过11位数字,也会从中截取出可能的手机号,如“213889887645”,当然这个看楼主的具体要求了
3.最重要的是如果存在类似“王明1李13889887645李刚”这样的数据,你会找到“1李138898876”
1.先对整个字段做DISTINCT似乎没有意义吧,先做DISTINCT最后得到的手机号仍然可能是重复的,如字段里有“王明13889887645”和“王明13889887645李刚”
2.如果有超过11位数字,也会从中截取出可能的手机号,如“213889887645”,当然这个看楼主的具体要求了
3.最重要的是如果存在类似“王明1李13889887645李刚”这样的数据,你会找到“1李138898876”你指出的问题说的很对。
1.distict最后可以加在最后一句,可以去除重复的手机号
2.手机号是不会超过11位的,当然会有特殊的情况
3.名字后面是不允许有数字
最后你指出的问题很对,碰到很特殊的情况这写法的确有问题
1.先对整个字段做DISTINCT似乎没有意义吧,先做DISTINCT最后得到的手机号仍然可能是重复的,如字段里有“王明13889887645”和“王明13889887645李刚”
2.如果有超过11位数字,也会从中截取出可能的手机号,如“213889887645”,当然这个看楼主的具体要求了
3.最重要的是如果存在类似“王明1李13889887645李刚”这样的数据,你会找到“1李138898876”
谢谢你指出我的问题。。