无法理解 LIKE 运算符语法
Trouble understanding a LIKE operator syntax
我粘贴了一个源代码来提取特定的数据集,但我在理解其中一个位时遇到了问题。这是查询的一部分:
WHERE r LIKE
((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) ,'.* coronavirus .*|.* SARS .*', 'si')
你能帮我翻译这个 LIKE
运算符的内括号是什么意思吗?非常感谢。
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.
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 正则表达式中不受支持。这意味着通常匹配零个或多个任何字符。您还得到了 |
那里的变化。但是,同样,它不会工作,因为 SQL 不支持完整的正则表达式。
编辑: 看起来 Postgre 运算符 SIMILAIR TO
支持以上正则表达式。
WHERE r LIKE ((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) ,'.* coronavirus .|. SARS .*', 'si')
WHERE r LIKE ( ( COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')
) ,
'.* coronavirus .*|.* SARS .*',
'si'
)
MySQL 和 PostgreSQL 都保证语法错误。
SQL 中的 COALESCE 函数在列 return 上有可能为空值时使用。该函数将 null 更改为所需的替代项。例如:COALESCE(title, '') => 会将任何空数据更改为 ''.
在那种特殊情况下不起作用,因为在许多列上使用了 LIKE 函数。你需要一个 => WHERE x LIKE y 或 x LIKE z
我粘贴了一个源代码来提取特定的数据集,但我在理解其中一个位时遇到了问题。这是查询的一部分:
WHERE r LIKE
((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) ,'.* coronavirus .*|.* SARS .*', 'si')
你能帮我翻译这个 LIKE
运算符的内括号是什么意思吗?非常感谢。
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.
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 正则表达式中不受支持。这意味着通常匹配零个或多个任何字符。您还得到了 |
那里的变化。但是,同样,它不会工作,因为 SQL 不支持完整的正则表达式。
编辑: 看起来 Postgre 运算符 SIMILAIR TO
支持以上正则表达式。
WHERE r LIKE ((COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')) ,'.* coronavirus .|. SARS .*', 'si')
WHERE r LIKE ( ( COALESCE(ur.title, '') || ' ' || COALESCE(urd.reviewtext, '')
) ,
'.* coronavirus .*|.* SARS .*',
'si'
)
MySQL 和 PostgreSQL 都保证语法错误。
SQL 中的 COALESCE 函数在列 return 上有可能为空值时使用。该函数将 null 更改为所需的替代项。例如:COALESCE(title, '') => 会将任何空数据更改为 ''.
在那种特殊情况下不起作用,因为在许多列上使用了 LIKE 函数。你需要一个 => WHERE x LIKE y 或 x LIKE z