难以理解LIKE运算符语法

问题描述 投票:0回答:4

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

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

您能帮我翻译一下此LIKE运算符的内括号是什么意思吗?提前非常感谢。

mysql sql postgresql sql-like coalesce
4个回答
1
投票

[COALESCE接受第二个参数,如果第一个是NULL

所以让我讲解几种可能性:

  • [ur.titleNULLurd.reviewtext'review,然后(COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, ''))的结果为:review ,

  • 如果两者均为NULL,则((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, ''))的值为','

  • [ur.titletitleurd.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 regex中不提供支持。这意味着通常匹配零个或多个任何字符。您也有|发生交替。但是,同样,由于SQL不能支持完整的正则表达式,因此无法使用。

EDIT:似乎Postgre运算符SIMILAIR TO支持上述正则表达式。


0
投票
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.


0
投票

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

在那种特殊情况下不起作用,因为在许多列上都使用了LIKE函数。您需要=> WHERE x LIKE y或X LIKE z


-1
投票

在哪里喜欢((COALESCE(ur.title,'')||''|| COALESCE(urd.reviewtext,``)),'。*冠状病毒。|。 SARS。*',' si')

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

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

© www.soinside.com 2019 - 2024. All rights reserved.