首页 > 解决方案 > 无法理解 LIKE 运算符语法

问题描述

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

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

你能帮我翻译一下这个LIKE运算符的内括号是什么意思吗?提前谢谢了。

标签: mysqlsqlpostgresqlsql-likecoalesce

解决方案


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

因此,让我了解几种可能性:

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

  • 如果两者都是NULL然后((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, ''))评估为','

  • ur.titleis title, urd.reviewtextis '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支持上述正则表达式。


推荐阅读