Postgres:对字符串的LIKE查询不返回任何结果,但结果存在

时间:2015-07-27 20:26:06

标签: postgresql pattern-matching sql-like

我觉得我在这里缺少一些非常简单的东西。我正在尝试从Postgres获取结果列表,我知道行存在,因为当我做一个简单的SELECT *时我可以看到它们。但是,当我尝试进行LIKE查询时,我什么也得不回。

示例数据:

{
  id: 1,
  userId: 2,
  cache: '{"dataset":"{\"id\":4,\"name\":\"Test\",\"directory\":\"/data/"...'
};

示例:

SELECT cache FROM storage_table WHERE cache LIKE '%"dataset":"{\"id\":4%';

我需要逃避吗?

1 个答案:

答案 0 :(得分:3)

LIKE运算符支持转义通配符(例如,以便您可以搜索下划线或%符号)。默认转义字符是反斜杠。

为了告诉LIKE运营商您想要将反斜杠用作ESCAPE字符,您需要定义另一个,例如~

SELECT cache 
FROM storage_table 
WHERE cache LIKE '%"dataset":"{\"id\":4%' ESCAPE '~';

您可以使用任何字符,这些字符未出现在您的数据ESCAPE '#'ESCAPE '§'

SQLFiddle示例:http://sqlfiddle.com/#!15/7703f/1

但是你应该认真考虑升级到一个完全支持JSON的更新的Postgres版本。由于能够索引JSON文档,因此您的查询不仅更强大,而且还可以更快批次