逃逸字符为反斜线时需要双写
背景信息
Vastbase G100支持使用SQL LIKE操作符实现模式匹配。通过LIKE语法来判断字符串是否能匹配上LIKE后的模式字符串。如果字符串与提供的模式匹配,则LIKE表达式返回为真,否则返回为假。
当LIKE中要查询特殊字符“%”、“_”、“\”的时候需要使用反斜杠“\”来进行转义。
在进行模糊匹配时:
- 下划线“_”代表(匹配)任何单个字符;百分号“%”代表任意串的通配符。
- 如果要匹配文本里的下划线或者百分号,在提供的模式里相应字符必须前导逃逸字符。逃逸字符的作用是禁用元字符的特殊含义,缺省的逃逸字符是反斜线“\”,也可以用ESCAPE子句指定一个不同的逃逸字符。
- 要匹配逃逸字符本身,需要写两个逃逸字符。例如要写一个包含反斜线的模式常量,需要在SQL语句里写两个反斜线。
更多模式匹配的相关信息参见模式匹配操作符。
功能描述
参数standard_conforming_strings用于控制普通字符串文本'…'
中是否按照SQL标准把反斜线当成了普通文本。设置为off时,在文串常量中写的任何反斜线都需要被双写。因此,写一个匹配单个反斜线的模式实际上要在语句里写四个反斜线(可以通过用ESCAPE选择一个不同的逃逸字符来避免这种情况,这样反斜线就不再是LIKE的特殊字符了。但仍然是字符文本分析器的特殊字符,所以仍需要两个反斜线)。
注意事项
- 除了反斜线双写的情况下,逃逸字符只能是单个字符。
- 参数standard_conforming_strings的默认值为on。
- 在兼容MySQL数据模式时,用户也可以通过写
ESCAPE''
的方式不选择逃逸字符,这样可以有效地禁用逃逸机制,但是没有办法关闭下划线和百分号在模式中的特殊含义。
示例
示例1:参数standard_conforming_strings为on时,逃逸字符为反斜线不用双写。
1、设置standard_conforming_strings参数值为on。
set standard_conforming_strings = on;
2、查看参数值是否设置成功。
show standard_conforming_strings;
返回结果为如下,设置成功。
standard_conforming_strings
-----------------------------
on
(1 row)
3、模糊查询,逃逸字符使用反斜线(反斜线不双写)。
SELECT '%A_BBCC' LIKE '\%A_B%' ESCAPE '\' AS RESULT;
返回结果为真,匹配成功。
result
--------
t
(1 row)
4、模糊查询,逃逸字符使用反斜线(反斜线双写)。
SELECT 'AA_BBCC' LIKE '\%A_B%' ESCAPE '\\' AS RESULT;
返回结果如下,逃逸字符不合法。
ERROR: invalid escape string
HINT: Escape string must be empty or one character.
CONTEXT: referenced column: result
示例2:参数standard_conforming_strings为off时,在文串常量中写的任何反斜线都需要被双写。
standard_conforming_strings为off时,使用
ESCAPE '\'
的写法会有编译错误。
1、设置参数standard_conforming_strings的值为off。
set standard_conforming_strings to off;
2、查看参数值是否设置成功。
show standard_conforming_strings;
返回结果如下,设置成功。
standard_conforming_strings
-----------------------------
off
(1 row)
3、设置参数escape_string_warning 的值为off 。
set escape_string_warning = off ;
参数escape_string_warning打开时,如果在普通字符串文本
'...'
中出现了一个反斜线(\)并且standard_conforming_strings为off,那么就会发出一个警告。该参数默认值是on。
4、模糊查询,逃逸字符为反斜线。文串常量中写的任何反斜线都需要被双写。
SELECT '\A_BBCC' LIKE '\A%' ESCAPE '\\' AS RESULT;
返回结果为真,匹配成功。
result
--------
t
(1 row)