求电话号码的最大连号数(嵌套循环实例)

求出电话号码的最大连号数电话号码位数):

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 行受影响)

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值