插件窝 干货文章 SQL 中如何使用 LIKE 查询包含双引号和反斜杠的 JSON 数据?

SQL 中如何使用 LIKE 查询包含双引号和反斜杠的 JSON 数据?

JSON 转义 使用 查询 826    来源:    2025-03-31

在 SQL 中使用 LIKE 查询包含双引号和反斜杠的 JSON 数据

当需要在 SQL 中使用 LIKE 操作符查询包含特殊字符(如双引号 " 和反斜杠 \)的 JSON 数据时,需要特别注意字符的转义处理。以下是几种解决方案:

方法一:使用转义字符

在大多数 SQL 实现中,可以通过转义特殊字符来查询:

-- 查询包含双引号的数据
SELECT * FROM table_name WHERE json_column LIKE '%\"%';

-- 查询包含反斜杠的数据
SELECT * FROM table_name WHERE json_column LIKE '%\\%';

方法二:使用 ESCAPE 子句

某些数据库支持 ESCAPE 子句来定义转义字符:

-- 使用 ESCAPE 定义转义字符
SELECT * FROM table_name WHERE json_column LIKE '%\"%' ESCAPE '\';
SELECT * FROM table_name WHERE json_column LIKE '%\\%' ESCAPE '\';

方法三:使用特定数据库的 JSON 函数(推荐)

对于现代数据库系统,使用专门的 JSON 函数比 LIKE 更可靠:

MySQL/MariaDB

SELECT * FROM table_name WHERE JSON_CONTAINS(json_column, '"some value"', '$.path');

PostgreSQL

SELECT * FROM table_name WHERE json_column::jsonb @> '{"key": "value with \" quote"}';

SQL Server

SELECT * FROM table_name WHERE JSON_VALUE(json_column, '$.property') = 'value with \" quote';

方法四:使用参数化查询(防止 SQL 注入)

在应用程序代码中,最好使用参数化查询:

# Python 示例
cursor.execute("SELECT * FROM table_name WHERE json_column LIKE %s", ['%\"%'])

注意事项

  1. 不同数据库系统对转义字符的处理可能不同
  2. LIKE 操作对大型 JSON 数据性能较差,应考虑使用专门的 JSON 函数
  3. 复杂的 JSON 查询应考虑将数据解析后存储或使用文档数据库

对于频繁的 JSON 查询操作,建议考虑使用数据库内置的 JSON 支持功能而不是 LIKE 操作。