mysql - 无法理解 LIKE 运算符语法
问题描述
我粘贴了一个源代码来提取特定的数据集,但我在理解其中一个位时遇到了问题。这是查询的一部分:
WHERE r LIKE
((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) ,'.* coronavirus .*|.* SARS .*', 'si')
你能帮我翻译一下这个LIKE
运算符的内括号是什么意思吗?提前谢谢了。
解决方案
COALESCE
如果第一个参数是 ,则接受第二个参数NULL
。
因此,让我了解几种可能性:
ur.title
isNULL
,urd.reviewtext
is'review
, 然后(COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, ''))
计算为:review ,
如果两者都是
NULL
然后((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, ''))
评估为','ur.title
istitle
,urd.reviewtext
is'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'
首先,当我崩溃时,没有任何通配符或任何正则表达式特定部分,所以它是按字面意思比较的。last 子句si
也是如此,所以它只会按si
字面意思匹配。
在第二个子句中'.* coronavirus .*|.* SARS .*'
,有正则表达式特定部分 as .*
,但在 SQL 正则表达式中不支持。这意味着通常匹配零个或多个任何字符。你也到了|
那里,这是交替。但是,再次,它不会工作,因为 SQL 不支持完整的正则表达式。
编辑:看起来 Postgre 运算符SIMILAIR TO
支持上述正则表达式。