Mysql 理解类运算符语法有困难

Mysql 理解类运算符语法有困难,mysql,sql,postgresql,sql-like,coalesce,Mysql,Sql,Postgresql,Sql Like,Coalesce,我粘贴了一个源代码来提取一个特定的数据集,但我在理解其中一个位时遇到了问题。以下是查询的一部分: WHERE r LIKE ((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) ,'.* coronavirus .*|.* SARS .*', 'si') 你能帮我翻译一下这个操作符的内括号是什么意思吗?非常感谢。如果第一个参数为NULL,则COALESCE接受第二个参数 WHERE r LIKE ((COALESC

我粘贴了一个源代码来提取一个特定的数据集,但我在理解其中一个位时遇到了问题。以下是查询的一部分:

WHERE r LIKE 
((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) ,'.* coronavirus .*|.* SARS .*', 'si')

你能帮我翻译一下这个
操作符的内括号是什么意思吗?非常感谢。

如果第一个参数为
NULL
,则COALESCE
接受第二个参数

WHERE r LIKE 
((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) ,'.* coronavirus .*|.* SARS .*', 'si')

1. COALESCE(ur.title, '') - coalesce function to give first not null value.
2. || ' ' || - to concat space with CONCAT function output.
3. COALESCE(urd.reviewtext, '') - coalesce function to give first not null value.

因此,让我来讨论两种可能性:

  • ur.title
    NULL
    urd.reviewtext
    'review
    ,然后
    (COALESCE(ur.title.)| | | | | | COALESCE(urd.reviewtext.))
    计算为:
    review,

  • 如果两者都为空
((COALESCE(ur.title),| | | | | | COALESCE(urd.reviewtext),)
计算为“,”

  • ur.title
    title
    urd.reviewtext
    'review
    ,然后
    (COALESCE(ur.title.)| | | | | | COALESCE(urd.reviewtext.))
    计算为:
    title review,

  • 现在,在
    (COALESCE(ur.title),| | | | COALESCE(urd.reviewtext),)(COALESCE(ur.title),| | | | COALESCE(urd.reviewtext),)
    没有连接操作符,所以很难猜测这里发生了什么,这是语法错误

    看起来您希望与多个值进行比较,但实际情况并非如此。您应该编写如下内容:

    LIKE (COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) OR
    LIKE '.* coronavirus .*|.* SARS .*' OR
    LIKE 'si'
    
    首先,正如我分解的那样,它没有任何通配符或任何特定于正则表达式的部分,所以它会进行字面上的比较。最后一个子句
    si
    也一样,所以它只会字面上匹配
    si

    在第二个子句
    .*coronavirus.*.*SARS.*
    中,有一些特定于正则表达式的部分,如
    .*
    ,但SQL正则表达式中不支持它。这意味着通常匹配零个或多个字符。您还可以使用
    .
    进行修改。但是,由于SQL不支持完整正则表达式,因此它无法工作

    EDIT:它看起来像Postgre操作符
    类似于
    对上述正则表达式的支持

    式中r-LIKE((COALESCE(ur.title),)| | | | | | | | | | | | | | | | | | COALESCE(urd.reviewtext),),,'.*冠


    MySQL和PostgreSQL中都保证存在语法错误。

    当列上可能返回空值时,将使用SQL中的COALESCE函数。该函数将空值更改为所需的替代值。例如:COALESCE(title“”)=>将所有空数据更改为“”


    在这种情况下,LIKE函数不起作用,因为LIKE函数正在许多列上使用。你需要一个=>WHERE x LIKE y或x LIKE z

    MySQL或Postgres?这是我老板发来的,我不确定他在哪里键入的查询,但我很确定它是PostgreSQL或Snowflake。你为什么不请老板澄清一下?你害怕吗?我很抱歉我现在正在问,但我远程工作,他在伦敦,我在新加坡,所以有一个延迟。哈哈。谢谢你非常详细和建设性的回应!是的,我理解COALESCE和双竖条对concat的第一点用法。但对我来说,他试图从该规范中找到什么仍然是一个谜。基本上我是一个我试图找出数据库中提到冠状病毒的任何评论。所以,我猜,“*冠状病毒。*|。*SARS.*”意味着评论中有任何这样的词。但是,是的,我仍然感到困惑。再次感谢!@pascahasanudin最好只使用
    columnName,如“%coronavirus%”或columnName,如“%SARS%”
    %
    表示任意字符的任意数量:)您甚至可以使用
    LOCATE
    函数(如果它是MySQL),它将返回搜索字符串的索引,如果找不到,它将返回-1(在postgre中,它是
    strpos
    )。如果我的回答对你有帮助,你应该接受它并有选择地投票;)请在您的answe中添加一些解释,以便其他人可以从中学习it@NicoHaase ??? 你想让我从用户手册中复制很多页面吗?这篇文章在综合上是不正确的。在两个数据库管理系统中。如果有人想真正理解什么是不正确的,他会创建最小的表结构,并要求SQL server构建执行计划—服务器会说什么是错误的。例如,没有一个DBMS允许使用三部分结构作为LIKE运算符的参数…我不理解你所说的“保证语法错误”是什么意思-这如何帮助任何人理解你的答案是如何解决(可能不清楚?)问题的?@NicoHaase只理解所写的内容,不要试图在这些词中添加或发现一些隐藏的意思。我保证当使用这个构造时,您将得到一条语法错误消息——仅此而已,仅此而已。保持简单…那么,发布一个产生语法错误的“构造”如何帮助OP理解这个问题呢?为什么不提供一个解决方案来解释什么是错误的以及如何解决?
    WHERE r LIKE ( ( COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')
                   ) ,
                   '.* coronavirus .*|.* SARS .*',
                   'si'
                 )