`

在数据库中用正则表达式查询数据

阅读更多
  • Mysql5.0及以后直接支持.

select * from customer where email regexp '@126.com';
详细信息参考
  • MS SQL2000及以后支持.

/* 本文来自Cory Koski。Cory写道:“我最近遇到一个问题,就是试图在数据库域中搜索一个正则表达式。还没有一个版本的SQLServer内部支持正则表达式,但我发现了一个将正则表达式的所有优点添加到你的T_SQL应用的方法。为了更容易的使用正则表达式,我们可以使用自定义函数(User Defined Function, UDF)来帮助我们并使工作简洁。”

在这个解决方案中,我们需要SQL Server 2000或更高。我们还需要确定机器中有VBScript.RegExp类库,这随大多数Windows 2000 servers中的Windows Scripting包配有。若你正在使用一个更早版本的Windows,你必须为你的操作系统下载最新版的Windows Scripting。
自定义函数
下面是我的自定义函数,可用来在源字符串中搜索一个正则模式表达式。*/
ALTER  FUNCTION dbo.find_regular_expression
 (
  @source varchar(5000),
  @regexp varchar(1000),
  @ignorecase bit = 0
 )
RETURNS bit
AS
 BEGIN
  DECLARE @hr integer
  DECLARE @objRegExp integer
  DECLARE @objMatches integer
  DECLARE @objMatch integer
  DECLARE @count integer
  DECLARE @results bit
  
  EXEC @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
  EXEC @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
  EXEC @hr = sp_OASetProperty @objRegExp, 'Global', false
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
  EXEC @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignorecase
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END 
  EXEC @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @source
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
  EXEC @hr = sp_OADestroy @objRegExp
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
 RETURN @results
 END


ALTER  function dbo.regexReplace
(
@source varchar(5000),    --原字符串
@regexp varchar(1000),    --正則表換式
@replace varchar(1000),   --替換值
@globalReplace bit = 0,   --是否是全局替換
@ignoreCase bit = 0       --是否忽略大小寫
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @result varchar(5000)

exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end 
exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end

return @result
end


i.e.
select top 1 * from hc_info_email where dbo.find_regular_expression(hc_rep_email,'@sohu|yahoo.com',0) != 0;
分享到:
评论

相关推荐

    在MySQL中用正则表达式替换数据库中的内容的方法

    PS:下面是转过来的,用于记录下,这个不是正则的初衷,只是用了REGEXP而已,正则的更灵活更方便 将comment表中的author_url包含www.sohu.com的记录,其中的sohu替换为sina,一个语句搞定~ update comment set ...

    PHP中用正则表达式清除字符串的空白

    我们经常会处理来自用户输入或从数据库中读取的数据,可能在你的字符串中有多余的空白或制表符,回车等。存储这些额外的字符是有点浪费空间的。

    在Asp中用“正则表达式对象”来校验数据的合法性

    因此我们在将这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便后面的程序可以安全顺利的执行。所以我们一般会在后端编写一个ASP的校验程序来分析用户输入的数据是否是合法的。 ...

    在ASP中用“正则表达式对象”来校验数据的合法性

    因此我们在将这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便后面的程序可以安全顺利的执行。所以我们一般会在后端编写一个ASP的校验程序来分析用户输入的数据是否是合法的。 ...

    C#编程经验技巧宝典

    121 &lt;br&gt;0200 如何使用正则表达式验证电话号码 121 &lt;br&gt;0201 如何使用正则表达式验证输入密码条件 121 &lt;br&gt;0202 如何使用正则表达式验证邮政编号 121 &lt;br&gt;0203 如何使用正则表达式验证手机号 ...

    MYSQL培训经典教程(共两部分) 1/2

    MYSQL高级特性 81 4.1 集合函数 82 4.1.1 行列计数 82 4.1.2统计...数据的改变时间 88 4.2.3 返回日期和时间范围 90 4.2.5 比较日期和时间 92 4.3 字符串模式匹配 93 4.3.1 标准的SQL模式匹配 93...

    MYSQL培训经典教程(共两部分) 2/2

    MYSQL高级特性 81 4.1 集合函数 82 4.1.1 行列计数 82 4.1.2统计...数据的改变时间 88 4.2.3 返回日期和时间范围 90 4.2.5 比较日期和时间 92 4.3 字符串模式匹配 93 4.3.1 标准的SQL模式匹配 93...

    开发、测试、资料面试题集锦

    7.写一个正则表达式的email验证 8.用JAVA写个Holler word程序 9.以前项目你做个单元测试没有,说说你是怎么样做的? 10.说一说你做过的项目的全流程 11.你是如何估算代码量的。 12.J2EE用过那些框架?你还用过...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    数据库开发基础、Microsoft SQLServer基础、SQL语言基础、索引、事务、SQL语言高级技术(空值处理、聚合与分组、数据分页、Union、日期函数、类型转换函数、流控函数、表连接、子查询、存储过程、触发器)、数据库...

    SQL培训第一期

    1.8.10.1 oracle正则表达式:去除&lt;&gt;&lt;/&gt;格式 select REGEXP_REPLACE(title,'&lt;[^&gt;]*&gt;','') title from exam_question 1.8.11 rank() over (partition by …) 1.8.11.1 语法 select organcode,score,ranknum from ( ...

    asp.net知识库

    ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证...

    ASP对象全接触资料集

    | | | ├─────────Internet Database Connector(Internet 数据库接口)的字段.txt | | | ├─────────Windows Scripting Host 对象模型概述.txt | | | ├─────────Windows Scripting ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    与Perl和C一样,在PHP中用(;)来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。 注释 PHP支持C,C++和Unix风格的注释方式: /* C,C++风格多行注释 */ // C++风格单行注释 # Unix风格单行注释 Hello,...

    xheditor-1.1.14

    localUrlTest:非本站域名测试正则表达式 参数值:正则表达式 说明:本参数用来测试某些组件中测试URL是否属于本站域名 备注:v1.1.8新添加 remoteImgSaveUrl:远程图片抓取接收程序URL 参数值:字符串(若不设置不...

Global site tag (gtag.js) - Google Analytics