SQL Server 2005: 正则表达式使模式匹配和数据提取变得更容易
2009-02-10 10:20:07 来源:WEB开发网select ROUTINE_NAME
from INFORMATION_SCHEMA.ROUTINES
where ROUTINE_TYPE = N'PROCEDURE'
and ( LEN( ROUTINE_NAME ) < 11
or LEFT( ROUTINE_NAME, 4 ) <> N'usp_'
or SUBSTRING( ROUTINE_NAME, 5, 6 ) not in
( N'Insert', N'Update', N'Delete', N'Select' ) )
即使代码数量多了,但此查询实际上缺少几项正则表达式版本中包含的功能。首先,它不区分大小写而且在查询中使用排序来执行测试会使其无规则可循。其次,它并未对包含在过程名称中的实际实体名称执行任何测试。第三,问题在于查询中测试的四个字符串的长度均为六个字符,这样我可以通过从六个字符中提取一个子串来简化代码,然后根据每个可接受的操作进行比较。由于所有操作名称的长度均为六个字符,因此该问题并不特定于此示例,但需要构想一个可以指定更复杂动词(例如“Get”、“List”或“Find”)的标准。RegexMatch 函数可以轻松处理这些动词,因为它们恰好是列表中的其他备选方案。
验证是正则表达式的常见用法,可以验证从电话号码到邮政编码以及自定义帐号数字格式的任何内容。CHECK 约束非常适合执行此项操作,如以下所示表定义。
CREATE TABLE [Account]
(
[AccountNumber] nvarchar(20) CHECK (dbo.RegexMatch(
[AccountNumber], '^[A-Z]{3,5}d{5}-d{3}$' ) = 1),
[PhoneNumber] nchar(13) CHECK (dbo.RegexMatch(
[PhoneNumber], '^(d{3})d{3}-d{4}$' ) = 1),
[ZipCode] nvarchar(10) CHECK (dbo.RegexMatch(
[ZipCode], '^d{5}(-d{4})?$' ) = 1)
)
AccountNumber 列是按照满足以下条件的任意约定来验证的,即以三到五个字母开始,后跟五个数字,然后是一个破折号,最后又是三个数字。电话号码和邮政编码都根据标准的美国电话号码和邮政编码格式进行验证。RegexMatch 函数为 SQL Server 提供了许多功能,而 .NET 中的正则表达式实现提供的功能则更多,正如您在下面内容中将看到的一样。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接