SQL поиск с помощью LIKE без учета скобок
У меня есть база иероглифов. Состоит из полей kanji (сам иероглиф), meaning (значение), on (китайское чтение), kun (японское чтение). Пытаюсь реализовать поиск по полям on и kun. В этих полях содержатся строки как эта: "や(く)、や(き)、や(ける)、く(べる)" или эта "かず、かぞ(える)、しばしば、せ(める)、わずらわ(しい)".
Допустим я хочу найти иероглифы, которые читаются как やける, но не все иероглифы в базе в полях on и kun содержат подстроку やける, некоторые, например содержат や(ける). Мне заранее не известно, где именно ставить скобки, если, например, подставлять их в PHP. Также не хотелось бы вносить изменения в базу.
Есть ли возможность реализовать поиск с помощью LIKE не учитывая скобки? Или имеется ли возможность вообще реализовать это средствами SQL?
Ответы (2 шт):
Почему бы не удалить скобки. Relpace(Relpace(source, '(', ''), ')', '') like '%' + Relpace(Relpace(searchingString, '(', ''), ')', '') + '%'
Реализовать можно путем нормализации значения. Для поиска やける без учета скобок:
SELECT * FROM mytable
WHERE REGEXP_REPLACE(kun, '[\\(\\)]', '') = 'やける'
Для того, чтобы на большом объеме поиск работал быстро, т.е. использовался индекс, нужно его создать приблизительно так:
CREATE INDEX mytable_kun_normalized_idx
on mytable ((REGEXP_REPLACE(kun, '[\\(\\)]', '')));