【问题标题】:PostgreSQL multiple substring searchPostgreSQL 多子串搜索
【发布时间】:2018-01-21 14:52:41
【问题描述】:

我想从 Javascript 中的 GET 字符串中获取子字符串,以将它们传递给 PostgreSQL 上的查询。 我已经尝试过使用 PostgreSQL 全文搜索,但最终遇到了问题,即全文搜索只允许前缀匹配 (Already described here)。

所以我希望将 'ILIKE ALL(array)' 与带有通配符的子字符串数组一起使用。

SELECT * from parcels WHERE doc ilike ALL(数组['%substr1%','%substr2%', '%substr3%']);

我像这样在 Javascript 中拆分我的 GET 字符串。

var str = (GET()['search']).split('+');

这已经给了我一个子字符串数组。 如何使用正则表达式为每个子字符串添加前导和尾随 %? 或者有更好的存档方法吗?

【问题讨论】:

    标签: javascript arrays postgresql


    【解决方案1】:

    在 JavaScript 中,您可以使用 map

    var str = (GET()['search']).split('+').map(word => '%' + word + '%');
    

    在 ES5 兼容代码中:

    var str = (GET()['search']).split('+').map(function (word) {
        return '%' + word + '%';
    });
    

    【讨论】:

    • 像魅力一样工作。我只需要将 % 编码为 %25 并将 ' 添加为 %27,这样我的查询就可以通过 GET 发送。所以:var str = (GET()['search']).split('+').map(function (word) { return '%27%25' + word + '%25%27'; }); 完成了这项工作。然后我的 Where 子句通过以下方式调用:where: "doc ilike all(array["+str+"])",
    • 啊,是的,您实际上可以使用return encodeURIComponent("'%" + word + "%'"),这样您就可以将编码留给JavaScript,如果特殊字符出现在单词本身中,它也会转义它们。虽然我注意到报价不被认为是特殊的,所以我不确定为什么在你的情况下它会是一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多