请问从字段取得手机号码的方法

xhwen 2008-11-16 02:57:31
我现在有一个表table,里面有两个字段f2,f3(nvarchar类型)里面保存有字符串和数字.
请问我要怎么取得f2,f3字段里面的11位手机号码.只取手机号码,其它的中文字符串和标点符号都不要
...全文
183 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2008-11-16
  • 打赏
  • 举报
回复
这个东西太智能化了,找个小MM一条一条记录的看,然后把手机号码存到另外一个字段中.
-狙击手- 2008-11-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xhwen 的回复:]
我发现一个问题,比如我的F1字段的内容是:

创建于1994年8月13日,总部坐落于长沙经济技术开发区。自公司成立以来,每年以50%以上的速度增长。2007年,全年实现营业收入91.4亿元,较上年同期增长75.52%;实现净利润19.06亿元,较上年同期增长157.12%。2008年1-9月,实现营业收入108.69亿元,较上年同期增长55.82%。联系电话:021-62626212 手机:13564728989  

得到的结果是:13502007914可这个并不是手机号码 真正的手机号是…
[/Quote]

-- Test Data: tb
If object_id('tb') is not null
Drop table tb
Go
Create table tb(f2 nvarchar(220),f3 nvarchar(20) )
Go
Insert into tb select '创建于1994年8月13日,总部坐落于长沙经济技术开发区。自公司成立以来,每年以50%以上的速度增长。2007年,全年实现营业收入91.4亿元,较上年同期增长75.52%;实现净利润19.06亿元,较上年同期增长157.12%。2008年1-9月,实现营业收入108.69亿元,较上年同期增长55.82%。联系电话:021-62626212 手机:13564728989 ','123456788901adadf'

go
create function f_findnum(@s nvarchar(220))
returns varchar(11)
as
begin
declare @i int
set @i = len(@s)
while (@i >0)
begin
if isnumeric(substring(@s,@i,11)) = 1 and len(substring(@s,@i,11)) = 11
return substring(@s,@i,11)
set @I = @I - 1
end
return 'NULL'
end
go

select dbo.f_findnum(f2),f2
from tb
drop function f_findnum
--Result:
/*

f2
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
13564728989 创建于1994年8月13日,总部坐落于长沙经济技术开发区。自公司成立以来,每年以50%以上的速度增长。2007年,全年实现营业收入91.4亿元,较上年同期增长75.52%;实现净利润19.06亿元,较上年同期增长157.12%。2008年1-9月,实现营业收入108.69亿元,较上年同期增长55.82%。联系电话:021-62626212 手机:13564728989

(所影响的行数为 1 行)

*/
--End
xhwen 2008-11-16
  • 打赏
  • 举报
回复
我发现一个问题,比如我的F1字段的内容是:

创建于1994年8月13日,总部坐落于长沙经济技术开发区。自公司成立以来,每年以50%以上的速度增长。2007年,全年实现营业收入91.4亿元,较上年同期增长75.52%;实现净利润19.06亿元,较上年同期增长157.12%。2008年1-9月,实现营业收入108.69亿元,较上年同期增长55.82%。联系电话:021-62626212 手机:13564728989  

得到的结果是:13502007914可这个并不是手机号码 真正的手机号是:13564728989
hdzdw 2008-11-16
  • 打赏
  • 举报
回复
学习了
ilovewalk 2008-11-16
  • 打赏
  • 举报
回复
MARK.
http://faq.csdn.net/read/28024.html
http://www.cnblogs.com/lizhiwen/archive/2007/05/23/757477.html
http://www.chenjiliang.com/Article/View.aspx?ArticleID=4247&TypeID=60
rucypli 2008-11-16
  • 打赏
  • 举报
回复
自己先找找存入的时候是有什么规律存的
水族杰纶 2008-11-16
  • 打赏
  • 举报
回复
--提取数字
IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_NUMBER('呵呵ABC123ABC')
GO
--123
百年树人 2008-11-16
  • 打赏
  • 举报
回复
如果还有其他连续数字是11位以上的就要加前三位判断了
-狙击手- 2008-11-16
  • 打赏
  • 举报
回复
比如前三位一定是135,133,130,139,138 。。 你自己加一个判断就行了
-狙击手- 2008-11-16
  • 打赏
  • 举报
回复


-- Test Data: tb
If object_id('tb') is not null
Drop table tb
Go
Create table tb(f2 nvarchar(20),f3 nvarchar(20) )
Go
Insert into tb select 'adf23423423423swrsdf','123456788901adadf'
Insert into tb select 'adf234234423swrsdf','123456788901adadf'
Insert into tb select 'adf23423423423swrsdf','12345678adadf'
go
create function f_findnum(@s varchar(20))
returns varchar(11)
as
begin
declare @i int
set @i = len(@s)
while (@i >0)
begin
if isnumeric(substring(@s,@i,11)) = 1
return substring(@s,@i,11)
set @I = @I - 1
end
return 'NULL'
end
go

select f2,dbo.f_findnum(f2),f3,dbo.f_findnum(f3)
from tb
drop function f_findnum
--Result:
/*

f2 f3
-------------------- ----------- -------------------- -----------
adf23423423423swrsdf 23423423423 123456788901adadf 23456788901
adf234234423swrsdf NULL 123456788901adadf 23456788901
adf23423423423swrsdf 23423423423 12345678adadf NULL

(所影响的行数为 3 行)

*/
--End
-狙击手- 2008-11-16
  • 打赏
  • 举报
回复
写个函数了,判断连续的11位数字

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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