sql 实现正则表达式

不知道sql可不可以实现正则表达式,我说的正则表达式和like应该不一样吧。like的匹配规则都和正则表达式不一样。知道的兄弟麻烦举一个例,希望能多写一点注释,谢谢!!!... 不知道sql可不可以实现正则表达式,我说的正则表达式和like应该不一样吧。like的匹配规则都和正则表达式不一样。知道的兄弟麻烦举一个例,希望能多写一点注释,谢谢!!! 展开
 我来答
匿名用户
推荐于2017-11-25
展开全部
没有正则表达式LIKE

确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft® SQL Server™ 会将其转换成字符串数据类型(如果可能)。

语法
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

参数
match_expression 任何字符串数据类型的有效 SQL Server 表达式。
patternmatch_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符

1 % 包含零个或更多字符的任意字符串
示例:WHERE title LIKE '%computer% ' 将查找处于书名任意位置的包含单词 computer 的所有书名。

2 _(下划线) 任何单个字符
示例:WHERE au_fname LIKE '_ean ' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。

3 [] 指定范围中的任何单个字符
示例:WHERE au_lname LIKE '[C-P]arsen ' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的 作者姓氏,例如,Carsen、Larsen、Karsen 等

4 [^] 不属于指定范围中的任何单个字符,与 [] 相反
示例:WHERE au_lname LIKE 'de[^l]% ' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。

一 使用 like 的模式匹配:
在搜索Datetime类型时,建议使用like .
LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。当所有参数,包括 match_expression、pattern 和 escape_character(如果有)都是 ASCII 字符数据类型时,将执行 ASCII 模式匹配。如果其中任何参数属于 Unicode 数据类型,则所有参数将被转换为 Unicode 并执行 Unicode 模式匹配。当对 Unicode 数据(nchar 或 nvarchar 数据类型)使用 LIKE 时,尾随空格是有意义的。但是对于非 Unicode 数据,尾随空格没有意义。Unicode LIKE 与 SQL-92 标准兼容。ASCII LIKE 与 SQL Server 的早期版本兼容

二 使用 % 通配符

例如,此查询将显示数据库中所有的系统表,因为它们都以字母 sys 开始:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'sys% '
若要查阅非系统表的所有对象,请使用 NOT LIKE 'sys% '。如果共有 32 个对象且 LIKE 找到 13 个与模式匹配的名称,则 NOT LIKE 将找到 19 个与 LIKE 模式不匹配的对象

三 使用escape字句的模式匹配

可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为 comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,请指定由 WHERE comment LIKE '%30!%% ' ESCAPE '! ' 组成的 WHERE 子句。如果不指定 ESCAPE 和转义符,SQL Server 将返回所有含字符串 30 的行。

下例使用 ESCAPE 子句和转义符查找 mytbl2 表的 c1 列中的精确字符串 10-15%

USE pubs
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'mytbl2 ')
DROP TABLE mytbl2
GO
USE pubs
GO
CREATE TABLE mytbl2
(
c1 sysname
)
GO
INSERT mytbl2 VALUES ( 'Discount is 10-15% off ')
INSERT mytbl2 VALUES ( 'Discount is .10-.15 off ')
GO
SELECT c1
FROM mytbl2
WHERE c1 LIKE '%10-15!% off% ' ESCAPE '! '
GO

四 使用 [] 通配符

下例查找姓为 Carson、Carsen、Karson 或 Karsen 的作者所在的行。
USE pubs
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE '[CK]ars[eo]n '
ORDER BY au_lname ASC, au_fname ASC
匿名用户
2013-04-13
展开全部
sql2005应该可以把sql2000就可以了啊例如下面返回字符串中的汉字:CREATE function chineseRegexReplace( @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 endCREATE FUNCTION Str_GetChineseWords(@OldStr varchar(200)) --返回字符串中的汉字RETURNS varchar(200) AS BEGIN declare @New varchar(200) set @New=dbo.chineseRegexReplace(@OldStr,'[^\u3400-\u9FFF]','',1,1) return @NewEND
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-13
展开全部
用全文检索,是最快的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-13
展开全部
好像不行 用正则表示式是用sql语句速度的10+倍 为什么不用正则呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙2011
2013-04-13 · TA获得超过1851个赞
知道小有建树答主
回答量:1043
采纳率:100%
帮助的人:789万
展开全部
不可以

可以用程序来辅助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式