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