PolarDB提供的模式匹配功能是通過(guò)使用傳統(tǒng)的SQL LIKE操作符來(lái)實(shí)現(xiàn)的。

語(yǔ)法

LIKE操作符的使用語(yǔ)法如下所示。

string LIKE pattern [ ESCAPE escape-character ]
string NOT LIKE pattern [ ESCAPE escape-character ]

每個(gè)參數(shù)pattern都定義了一個(gè)字符串集,如果參數(shù)pattern定義的字符串集中包含參數(shù)string的值,那么LIKE表達(dá)式返回true。正如所期望的,如果LIKE表達(dá)式返回為真,那么NOT LIKE表達(dá)式返回為假,反之亦然。與NOT LIKE相等的表達(dá)式是NOT (string LIKE pattern)。

如果參數(shù)pattern不包括百分號(hào)或者下劃線,那么模式只表示字符串本身,在這種情況下,LIKE操作符和等于號(hào)的作用相同。在參數(shù)pattern中的下劃線表示匹配單個(gè)字符,而百分號(hào)則表示匹配任意字符串。

示例

'abc' LIKE 'abc'    true
'abc' LIKE 'a%'     true
'abc' LIKE '_b_'    true
'abc' LIKE 'c'      false    
LIKE模式匹配覆蓋整個(gè)字符串,如果想從字符串中任意位置開始匹配,那么模式必須以百分號(hào)開始,以百分號(hào)結(jié)束。
'abc'     LIKE   '%b%'    true
如果只想匹配字符串中的下劃線或者百分號(hào),那么在模式中,必須通過(guò)使用換碼符對(duì)這兩個(gè)字符分別進(jìn)行處理。默認(rèn)的換碼符是反斜線,但是我們也可以通過(guò)使用ESCAPE子句來(lái)選擇一個(gè)不同的換碼符。如果想匹配換碼符本身,那么就需要寫上兩個(gè)換碼符。
'abc_d'    LIKE   '%\_%'    true
'abc%d'    LIKE   '%\%%'    true
'abc_d'    LIKE   '%/_%'    ESCAPE  '/'  true
'abc\d'    LIKE   '%\\%'    true
需要注意的是在字符串中,反斜線已經(jīng)有了特定含義,所以當(dāng)匹配模式中包含一個(gè)反斜線的時(shí)候,在SQL語(yǔ)句中實(shí)際上要寫上2個(gè)反斜線。因此,書寫一個(gè)包含以文字方式出現(xiàn)的反斜線意味著必須在語(yǔ)句中寫上4個(gè)反斜線。而通過(guò)使用ESCAPE子句來(lái)選擇不同的換碼符,就可以避免這種情況的發(fā)生;這樣反斜線對(duì)于LIKE操作符來(lái)說(shuō)就沒(méi)有特定的含義了(但是對(duì)于字符串分析器來(lái)說(shuō),它仍然具有特定含義,所以需要在字符串中寫2個(gè)反斜線。) 。
'ab\c'     LIKE  '%\\%'    true
'ab\\c'    LIKE  '%\\\\%'  true
'ab\\c'    LIKE  '%\\%'    ESCAPE  '/'  true
我們也可以通過(guò)使用ESCAPE ‘’來(lái)不選擇換碼符。這樣可以有效地禁用換碼符機(jī)制,使其不可能關(guān)閉匹配模式中的下劃線和百分號(hào)的特定含義。
'abc%d'    LIKE  '%\%%'  true
'abc%d'    LIKE  '%\%%'  ESCAPE  ''  false