Inside Microsoft SQL Server 2005: T-SQL Programming (数据类型|第一章) 字符串

模式匹配

SQL Server暂时不支持正则表达式,只能够通过LIKE与PATINDEX来完成匹配。SQL Server 2000的优化器只能够利用通用的搜索选择性估计,SQL Server 2005的优化器会对子字符串建立统计,这样可以获得更加精确的选择性估计。因此,即使在包含通配符的情况,SQL Server 2005也能够使用索引。

例如,如下的两个SQL语句,他们的作用都是用来寻找所有CustomerID以字母A开头的项:

SELECT CustomerID, CompanyName, Country

FROM dbo.Customers

WHERE LEFT(CustomerID, 1) = N'A';


SELECT CustomerID, CompanyName, Country

FROM dbo.Customers

WHERE CustomerID LIKE N'A%';

在上例中,LIKE语句将会利用索引来优化执行效率,而LEFT却不会利用索引。


由于LIKE只提供了一个基本的模式匹配,因此很多情况下我们需要采用一些特定的方法来匹配。

例如,当需要匹配固定长度的由数字组成的字符串时,我们可以采用如下表达式:

sn LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

当我们需要匹配不定长度的由数字组成的短字符串时,我们可以采用如下表达式:

sn LIKE REPLICATE('[0-9]', LEN(sn))

倘若字符串娇长,我们可以尝试从反面来考虑这个问题:

sn NOT LIKE '%[^0-9]%'

大小写敏感性

SQL Server的大小写敏感性由数据的collation属性决定。例如如下的搜索中包含了一个大小写敏感的条件:

SELECT CustomerID, CompanyName, Country

FROM dbo.Customers

WHERE CustomerID COLLATE Latin1_General_CS_AS = N'ALFKI';

但是在上述表达式中,系统并不能有效地利用数据库的索引。通常,我们可以增加一个非大小写敏感的限制条件来强迫优化器使用数据库索引:

SELECT CustomerID, CompanyName, Country
FROM dbo.Customers
WHERE CustomerID COLLATE Latin1_General_CS_AS = N'ALFKI' AND CustomerID = N'ALFKI';

上述表达式中,优化器会首先利用索引执行非大小写敏感的限制搜索CustomerID = N'ALFKI',接着再从结果中搜索大小写敏感的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值