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'
Во-первых, как я сказал, у меня нет подстановочных знаков или каких-либо регулярных выражений, определяющих c частей, поэтому он сравнивается буквально. То же относится и к последнему предложению si
, поэтому оно будет соответствовать буквально si
.
Во втором предложении '.* coronavirus .*|.* SARS .*'
есть регулярное выражение, определяющее c части как .*
, но это не так. Поддерживается в SQL регулярном выражении. Это обычно соответствует нулю или более любых символов. У вас также есть |
, что является изменением. Но, опять же, он не будет работать, поскольку SQL не поддерживает полное регулярное выражение.
РЕДАКТИРОВАТЬ: похоже, что Postgre оператор SIMILAIR TO
поддерживает выше регулярное выражение.