当需要在 SQL 中使用 LIKE 操作符查询包含特殊字符(如双引号 "
和反斜杠 \
)的 JSON 数据时,需要特别注意字符的转义处理。以下是几种解决方案:
在大多数 SQL 实现中,可以通过转义特殊字符来查询:
-- 查询包含双引号的数据
SELECT * FROM table_name WHERE json_column LIKE '%\"%';
-- 查询包含反斜杠的数据
SELECT * FROM table_name WHERE json_column LIKE '%\\%';
某些数据库支持 ESCAPE 子句来定义转义字符:
-- 使用 ESCAPE 定义转义字符
SELECT * FROM table_name WHERE json_column LIKE '%\"%' ESCAPE '\';
SELECT * FROM table_name WHERE json_column LIKE '%\\%' ESCAPE '\';
对于现代数据库系统,使用专门的 JSON 函数比 LIKE 更可靠:
SELECT * FROM table_name WHERE JSON_CONTAINS(json_column, '"some value"', '$.path');
SELECT * FROM table_name WHERE json_column::jsonb @> '{"key": "value with \" quote"}';
SELECT * FROM table_name WHERE JSON_VALUE(json_column, '$.property') = 'value with \" quote';
在应用程序代码中,最好使用参数化查询:
# Python 示例
cursor.execute("SELECT * FROM table_name WHERE json_column LIKE %s", ['%\"%'])
对于频繁的 JSON 查询操作,建议考虑使用数据库内置的 JSON 支持功能而不是 LIKE 操作。