PostgreSQL 中 LIKE 语句匹配模式时转义字符串

PostgreSQL LIKE 模式匹配需要转义特殊字符。
转义字符默认为反斜杠 (\),但旧版本可能会因配置问题而失败。
转义下划线 (_) 和百分号 (%) 时,必须添加反斜杠。
例如:name LIKE 'a\_%' 匹配以“a_”开头的字符串。

使用 ESCAPE 子句来匹配转义字符。
例如:name LIKE 'a\_%' ESCAPE '^',其中 ^ 是转义字符。
建议使用^或|作为转义字符,因为它在用户输入中很少见。

在服务器端逃逸是最安全的。
使用replace()函数来预处理用户输入。
例如:替换(替换(替换($1 , '^', '^^'), '%', '^%'), '_', '^_')。
最后添加%匹配前缀来指定转义字符。

Go语言示例: 去 db.Query("SELECT FROM users WHERE name LIKE Replace(replace(replace($1 , '^', '^^'), '%', '^%'), '_', '^_') || '%' ESCAPE '^'", userInput)
参数化查询可防止 SQL 注入并使逻辑分离更清晰。

注意:PostgreSQL 9 .1 + 的 standard_conforming_strings=ON,并且反斜杠仅被转义。
在旧版本中或关闭时,斜杠可以用作字符串终止符。
必须使用 ESCAPE 子句显式指定转义字符。

当用户输入包含转义字符时,必须转义两次。
例如:要匹配“^^”,请键入“^^^”。

自己掂量一下。

SQL中REPLACE函数如何替换字符串_REPLACE函数替换字符串的用法

REPLACE函数直接替换字符串的子字符串。
语法非常简单:REPLACE(字符串原始,字符串旧,字符串新)。

上周我们刚刚处理了一个使用此函数来替换产品编号的案例。
非常高效。

请注意,大小写字母区分大小写。
Oracle和MySQL的用法基本相同。

在集群中进行替换时,请先尝试使用 SELECT。
替换空格时要特别小心。

这是第一个。