SQL 之 模糊匹配

模糊匹配

关键字:LIKE , SOUNDEX , DIFFERENCE

 

1. 模式匹配

WHERE子句中使用LIKE操作符来查找针对列值的某个部分的匹配。LIKE + 通配符 来指定。

SELECT

MovieTitle AS Movie

FROM Movies

WHERE MovieTitle LIKE %LOVE%

查找电影名包含LOVE的电影(LOVE不区分大小写)。

 

%string表示字符string前面可以有任意多字符,string%表示string后面可以有任意多字符。即

LOVE开头:LOVE%

LOVE结尾:%LOVE

LOVE是单独一个单词而不作为名字中的开头或者结尾:% LOVE %

 

但注意如果是Oracle,是区分大小写的,通配符里面的字符严格匹配大小写,这和在SQL中使用本例是不一样的。一般等价的话,要在Oracle里面使用UPPER转换为全大写后进行匹配:

SELECT

MovieTitle AS Movie

FROM Movies

WHERE UPPER (MovieTitle) LIKE %LOVE%;

 

2. 通配符

除了 %,还有下划线 (_)、方括号[] 括起来的字符列表,以及用方括号[] 括起来的脱字符号加上字符列表。

 

通配符

             含义

%

             任意多个字符(可以是没有字符)

_

             刚好1个字符(可以是任意的字符)

[characterlist]

             出现在字符列表里面的1个字符(刚好1个)

[^characterlist]

             没有出现在字符列表里面的1个字符(刚好1个)

 

MySQLOracle里面没有后两种通配符。

 

_ARY     Cary ,  Mary ,  Gray

[CM]ARY   Cary ,  Mary

[^CG]ARY   Mary

 

上面只能匹配以ARY结尾的单词。

NOT使用:

SELECT

FirstName,

LastName

FROM Actors

WHERE FirstName LIKE %ARY%

AND FirstName NOT LIKE  [MG]ARY

 

NOT LIKE  [MG]ARY 和 [^MG]ARY也是不同的,注意区分意义。

 

3. 按照读音匹配

SOUNDEXDIFFERENCE

 

SELECT

SOUNDEX (Smith) AS Sound of Smith

SOUNDEX (Smythe) AS Sound of Smythe

 

结果:

Sound of Smith       Sound of Smythe

---------------------------------------------

5530                  5530

 

SOUNDEX返回4个字符的代码,表示短语的读音。代码相同说明读音相似。

 

DIFFERENCE MySQLOracle没有DIFFERENCE函数)

SELECT

DIFFERENCE (Smith, Smythe) AS The Difference

 

The Difference

--------------------

4

 

DIFFERENCE总是需要两个参数,先得到这两个参数的SOUNDEX值,再比较这两个值。返回4说明SOUNDEX值中的4个字符全部相等,返回0则字符中没有相等的值。因此,DIFFERENCE的值为4是最大可能的匹配。

SELECT

FirstName,

LastName

FROM Actors

WHERE DIFFERENCE (FirstName, John) = 4

 

Actors表中查找FirstName读音和John非常相似的名字:

可能返回

FirstName    LastName        

Jon            Voight

John          Wayne

 

你可能感兴趣的:(数据库)