SQL поиск с помощью LIKE без учета скобок

У меня есть база иероглифов. Состоит из полей kanji (сам иероглиф), meaning (значение), on (китайское чтение), kun (японское чтение). Пытаюсь реализовать поиск по полям on и kun. В этих полях содержатся строки как эта: "や(く)、や(き)、や(ける)、く(べる)" или эта "かず、かぞ(える)、しばしば、せ(める)、わずらわ(しい)".

Допустим я хочу найти иероглифы, которые читаются как やける, но не все иероглифы в базе в полях on и kun содержат подстроку やける, некоторые, например содержат や(ける). Мне заранее не известно, где именно ставить скобки, если, например, подставлять их в PHP. Также не хотелось бы вносить изменения в базу.

Есть ли возможность реализовать поиск с помощью LIKE не учитывая скобки? Или имеется ли возможность вообще реализовать это средствами SQL?


Ответы (2 шт):

Автор решения: Aziz Umarov

Почему бы не удалить скобки. Relpace(Relpace(source, '(', ''), ')', '') like '%' + Relpace(Relpace(searchingString, '(', ''), ')', '') + '%'

→ Ссылка
Автор решения: Roman Konoval

Реализовать можно путем нормализации значения. Для поиска やける без учета скобок:

SELECT * FROM mytable
WHERE REGEXP_REPLACE(kun, '[\\(\\)]', '') = 'やける'

Для того, чтобы на большом объеме поиск работал быстро, т.е. использовался индекс, нужно его создать приблизительно так:

CREATE INDEX mytable_kun_normalized_idx
  on mytable ((REGEXP_REPLACE(kun, '[\\(\\)]', '')));
→ Ссылка