如何在psql LIKE查询正则表达式中使用变量

时间:2019-01-20 18:24:22

标签: sql postgresql sql-like

我有一个psql数据库,其中有两个要联接的表用于查询。表1(我们可以称为Articles)具有两列:

  • slug-这是网站中文章路径的名称

    • 示例1-'my-article-1'
    • 示例2-'my-article-2'
  • 标题-文章的实际标题

    • 示例1-“我的第一篇文章”
    • 示例2-“我的第二篇文章”

表2(我们称为Log)有两列,它们共同代表从服务器发回的请求响应:

  • url-这是GET请求的url路径

    • 示例1-'/ articles / my-article1'
    • 示例2-'/ articles / my-article2'
  • 状态-这是从服务器发回的状态代码

    • 示例-“ 200确定”

我想返回已请求特定文章并返回“ 200 OK”状态码的次数。

我的问题: 我想将Articles.slug变量与我的where子句中的Log.url变量匹配,但是我不知道如何在正则表达式中使用变量。现在,我正在努力将段塞与路径匹配,这是到目前为止的代码:

SELECT articles.title, articles.slug, log.path
FROM articles, log
WHERE log.path like '/articles/' + articles.slug
and log.status = '200 OK'

我知道我的WHERE子句不正确,这就是我要寻找的。如何将完整的log.path字符串与带有变量articles.slug的串联字符串匹配。

抱歉,如果其中任何一个不清楚或看起来很愚蠢,我是第一次学习SQL <3

2 个答案:

答案 0 :(得分:0)

我想出了一个解决方案,它不能完全回答我的问题,但是这就是我的解决方法。

select articles.title, count(*)
from articles, log
where substring(log.path,10,100) = articles.slug
and log.status = '200 OK'
group by articles.title

答案 1 :(得分:0)

了解如何使用带有JOIN子句的正确,明确,标准 ON语法。您的查询应该看起来像这样:

SELECT a.title, a.slug, l.path
FROM articles a JOIN
     log l
     ON l.path like '/articles/' || a.slug
WHERE l.status = '200 OK';

||是Postgres和大多数其他数据库中的串联运算符,因为它是用于字符串串联的ISO / ANSI标准运算符。