求出电话号码的最大连号数(电话号码位数):
如:
10000033 --最大连号数5个 (00000)
22858155 --最大连号数2个 (22 or 55)
13145201 --最大连号数0个 (全部单1)
依此类推。
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-02 14:11:21
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:ta
IF NOT OBJECT_ID('[ta]') IS NULL
DROP TABLE [ta]
GO
CREATE TABLE [ta]([phonenum] NVARCHAR(10))
INSERT [ta]
SELECT '10000033' UNION ALL
SELECT '25855555' UNION ALL
SELECT '25889155' UNION ALL
SELECT '22858555' UNION ALL
SELECT '13145201'
GO
--SELECT * FROM [ta]
-->SQL查询如下:
--1、生成连接查询辅表
IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb](num int,[phonenum] NVARCHAR(10))
--嵌套循环插入数值(1)
DECLARE @i INT,@j INT
SELECT @i=0,@j=2
WHILE @j<=8
BEGIN
WHILE @i<=9
BEGIN
INSERT tb SELECT @j,REPLICATE(@i,@j)
SET @i=@i+1
END
SET @i=0 --注意:一定要再重置它的值,否则它一直为9
SET @j=@j+1
END
--结果(1):
/*
num phonenum
----------- ----------
2 00
2 11
2 22
2 33
2 44
2 55
2 66
2 77
2 88
2 99
3 000
3 111
3 222
3 333
3 444
3 555
3 666
3 777
3 888
3 999
4 0000
4 1111
4 2222
4 3333
4 4444
4 5555
4 6666
4 7777
4 8888
4 9999
5 00000
5 11111
5 22222
5 33333
5 44444
5 55555
5 66666
5 77777
5 88888
5 99999
6 000000
6 111111
6 222222
6 333333
6 444444
6 555555
6 666666
6 777777
6 888888
6 999999
7 0000000
7 1111111
7 2222222
7 3333333
7 4444444
7 5555555
7 6666666
7 7777777
7 8888888
7 9999999
8 00000000
8 11111111
8 22222222
8 33333333
8 44444444
8 55555555
8 66666666
8 77777777
8 88888888
8 99999999
(70 行受影响)
*/
/*
--嵌套循环插入数值(2)
DECLARE @i INT,@j INT
SELECT @i=0,@j=2
WHILE @i<=9
BEGIN
WHILE @j<=8
BEGIN
INSERT tb SELECT @j,REPLICATE(@i,@j)
SET @j=@j+1
END
SET @j=2 --注意:一定要再重置它的值,否则它一直为8
SET @i=@i+1
END
--结果:
/*
num phonenum
----------- ----------
2 00
3 000
4 0000
5 00000
6 000000
7 0000000
8 00000000
2 11
3 111
4 1111
5 11111
6 111111
7 1111111
8 11111111
2 22
3 222
4 2222
5 22222
6 222222
7 2222222
8 22222222
2 33
3 333
4 3333
5 33333
6 333333
7 3333333
8 33333333
2 44
3 444
4 4444
5 44444
6 444444
7 4444444
8 44444444
2 55
3 555
4 5555
5 55555
6 555555
7 5555555
8 55555555
2 66
3 666
4 6666
5 66666
6 666666
7 6666666
8 66666666
2 77
3 777
4 7777
5 77777
6 777777
7 7777777
8 77777777
2 88
3 888
4 8888
5 88888
6 888888
7 8888888
8 88888888
2 99
3 999
4 9999
5 99999
6 999999
7 9999999
8 99999999
(70 行受影响)
*/
*/
--2、开始查询
SELECT 电话号码=a.phonenum,
最大连号数=MAX(ISNULL(b.num,0))
FROM ta a
LEFT JOIN tb b
ON a.phonenum like '%'+b.phonenum+'%'
GROUP BY a.phonenum
--结果:
/*
电话号码 最大连号数
---------- -----------
10000033 5
13145201 0
22858155 2
25855555 5
25889555 3
(5 行受影响)
*/