Как использовать like / rlike для фильтрации строк с пробелами по обе стороны - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь написать запрос, чтобы найти строки, где нет места, кроме.Это означает, что «xx applexx», «xxapple xx» и «xx apple xx» неприемлемы, но «xxapplexx» следует запрашивать.

Я пробовал

select a
from b
where b.c not rlike '(an apple | an apple)'

Но выражение кажется неправильным.

Еще пример: скажем, у нас есть 4 записи в базе данных:

    Name    Data
    a    I have an appleYo
    b    I havean apple Yo
    c    I have an apple Yo
    d    I havean appleYo

Ожидаемый результат должен быть:

    Name    Data
    d    I havean appleYo

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете использовать

where b.c rlike '\\Sapple\\S'

Или, если вы хотите "исключить" символы невидимого пространства из совпадения (это не предпочтительно для сценария rlike, а скорее для операции замены)

where b.c rlike '(?<=\\S)apple(?=\\S)'

См. Демоверсию regex .

Детали

  • \S - любой символ, кроме пробела
  • (?<=\S) - положительный взгляд сзади, который требует любой символ, кроме пробелов непосредственно перед текущим местоположением
  • (?=\S) - положительный прогноз, который требует любой символ, но пробел сразу после текущего местоположения.
...