SQL: LIKE-запрос для столбца с chr (10) или chr (13) - PullRequest
0 голосов
/ 01 октября 2018

Я делаю

select field1 
from tablename 
where field1 like '%xyz zrt bla bla trew%'

field1 - столбец сгустка, и между 'xyz zrt bla bla trew' могут быть символы новой строки, такие как chr (10) или chr (13).Так что это может быть 'xyz\r\n\rzrt bla bla\n\n trew' и т. Д.

. Они конвертируются в один (или несколько пробелов).Таким образом, любые пробелы между словами могут быть настоящими пробелами или одним или несколькими символами новой строки.

Как мне это учесть в моем LIKE?

Я использую Oracle, но есливозможно я хотел бы использовать что-то, что работает для SQL Server и т. д.

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Вы можете заменить \ n и \ r пробелами, а затем обрезать пробелы, а затем сравнить.Это всегда будет работать и, возможно, достаточно быстро.

Однако для правильного ускорения процесса поиска вы можете сохранить результаты обрезки в указанном столбце «field1_trim».

Зависит от ваших потребностей - сохранениеРезультаты обрезки во временную таблицу могут быть достаточными и более сбалансированными между пространством и скоростью решения.

Например: сохранить результат следующего запроса во временную таблицу, а затем выполнить запрос к ней

select 
  regexp_replace('[[:space:]]+', chr(32)) 
  field1_trim,
  <some unique row id to map to original table>
 from table1;
0 голосов
/ 01 октября 2018

Ленивое решение (опираясь на регулярные выражения, которые могут или не могут снизить производительность - что может иметь или не иметь значение) будет выглядеть примерно так:

select field1 
from   tablename 
where  regexp_like(field1, 'xyz\s+zrt\s+bla\s+bla\s+trew')
0 голосов
/ 01 октября 2018

Для Oracle вы можете использовать INSTR(field1, chr(10)) > 0

Для SQL Server вы можете использовать field1 LIKE '%' + CHAR(10) + '%' или CHARINDEX(CHAR(10), field1) > 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...