我粘贴了源代码以提取特定的数据集,但在理解其中一位时遇到了问题。这是查询的一部分:
WHERE r LIKE
((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) ,'.* coronavirus .*|.* SARS .*', 'si')
您能帮我翻译一下此LIKE
运算符的内括号是什么意思吗?提前非常感谢。
[COALESCE
接受第二个参数,如果第一个是NULL
。
所以让我讲解几种可能性:
[ur.title
为NULL
,urd.reviewtext
为'review
,然后(COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, ''))
的结果为:review ,
如果两者均为NULL
,则((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 regex中不提供支持。这意味着通常匹配零个或多个任何字符。您也有|
发生交替。但是,同样,由于SQL不能支持完整的正则表达式,因此无法使用。
EDIT:似乎Postgre运算符SIMILAIR TO
支持上述正则表达式。
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.
当列上可能返回空值时,使用SQL中的COALESCE函数。函数将null更改为所需的替换。例如:COALESCE(title,'')=>会将所有空数据更改为”。
在那种特殊情况下不起作用,因为在许多列上都使用了LIKE函数。您需要=> WHERE x LIKE y或X LIKE z
在哪里喜欢((COALESCE(ur.title,'')||''|| COALESCE(urd.reviewtext,``)),'。*冠状病毒。|。 SARS。*',' si')
WHERE r LIKE ( ( COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')
) ,
'.* coronavirus .*|.* SARS .*',
'si'
)
在MySQL和PostgreSQL中均保证语法错误。