asp里sql语句这个正则式怎么写

我需要按尾数规律来判断手机号码例:138236105601382369110313823686082ifso_gl="AAAAA"thensqlstr=sqlstr&"a... 我需要按尾数规律来判断手机号码 例:13823610560 13823691103 13823686082 if so_gl="AAAAA" then sqlstr=sqlstr&" and right(s_hm,5) in("&tc1&") " 这样写加载量太大怎么定义这个正则式
有正则式的写法查询name字段中不含有数字的。select * from table1 where name like '%[!0-9]%'

麻烦哪位高手了
展开
 我来答
百度网友7558ae7
2013-06-28 · TA获得超过5797个赞
知道小有建树答主
回答量:1730
采纳率:50%
帮助的人:1702万
展开全部

如果你想在数据库里解决估计只能用到自定义函数了﹐系统目前的简单的正则表达达式根本没法解决这个问题﹐我把我的思路说给你听下﹐

你可以先在数据库建一个函数﹐然后用函数去匹配你尾数规则﹐然后用函数返回的值来筛选数据

我建的参考函数NUMBER_CHECK(@GZ AS varchar(20),@STR AS VARCHAR(20))

需要两个参数﹐第一个 是你需要的表达式参数﹐比如 AAA或AABCC或**AB**AB都行

第二个参数就是你的手机号码字段了﹐比如 RIGHT(s_hm,8)

返回值是1匹配﹐0不匹配

目前我只写了A和B﹐如故你觉得此方法可行再追加评论﹐我再发给你

IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'NUMBER_CHECK' AND type = 'FN')
DROP FUNCTION  NUMBER_CHECK
GO
CREATE FUNCTION  dbo.NUMBER_CHECK(@GZ AS varchar(20),@STR AS VARCHAR(20))
RETURNS  INT --含两个参数﹐返回值类型为INT
AS 
BEGIN
DECLARE @RVAL INT
DECLARE @NEXT1 INT
DECLARE @NEXT2 INT
SET @NEXT1=0
SET @NEXT2=0
SET @RVAL=0
WHILE @NEXT1<=9 
BEGIN
IF  @STR LIKE '%'+REPLACE(REPLACE(REPLACE(@GZ,'B',@NEXT2),'A',@NEXT1),'*','_')+'%'
BEGIN
SET @RVAL=1
BREAK
END
ELSE
BEGIN
WHILE @NEXT2<=9 
BEGIN
IF  @STR LIKE '%'+REPLACE(REPLACE(REPLACE(@GZ,'B',@NEXT2),'A',@NEXT1),'*','_')+'%'
BEGIN
SET @RVAL=1
BREAK
END
ELSE
SET @NEXT2=@NEXT2+1
END
END
SET @NEXT1=@NEXT1+1
SET @NEXT2=0
END
RETURN @RVAL
END

最后测试数据﹕

DECLARE @TB TABLE(ST VARCHAR(60))
INSERT INTO @TB VALUES('13615292900')
INSERT INTO @TB VALUES('13615291000')
INSERT INTO @TB VALUES('13615296666')
INSERT INTO @TB VALUES('13615293333')
INSERT INTO @TB VALUES('13615293529')
INSERT INTO @TB VALUES('13612221110')

SELECT ST, dbo.NUMBER_CHECK('**AB**AB',RIGHT(ST,8)) as 匹配结果 FROM @TB

效果图

速动科技
2013-07-03 · TA获得超过108个赞
知道小有建树答主
回答量:205
采纳率:75%
帮助的人:98.1万
展开全部
感觉像是钻牛角尖了

应该把思路换一下,就很简单了。
你这里的尾数规律可以视为分类,当你在后台每录入一个手机号时,勾选这个手机号属于哪几个分类就行了。

解决办法,就是在数据库增加一个字段专门用来记录,分类的。

前台就是点击分类,显示分类下的所有数据。

这样一来,省去了很多烦索的程序执行,页面显示速度也会快很多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Daview
2013-07-02 · TA获得超过1075个赞
知道小有建树答主
回答量:1259
采纳率:71%
帮助的人:502万
展开全部
首先,你要懂正则表达式。这个这里不多说了,我也不是很懂,而且要编写正确,有点头痛~~~~

其次,对每个格式定义一个编号,如:

编号 格式 正则表达式

这样的关系,这样,选择格式(如AAAAA)的时候,连接对应的编号,查询表达式,也可以直接在格式中标记正则表达式的值。

第三,查询的时候,根据正则表达式再去查询目标数据匹配。SQL数据是支持正则表达式的。

第四,切忌,不要把所有数据查处来后,在ASP里来判断,那就~~~~晕菜了。

最后一个方案就是:在建立这些号码数据库的时候,就说明他们属于什么格式,如:

号码表:
ID 号码 其它信息

格式表:
ID 格式名 其它信息

关联表:
号码 格式名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式