Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Поиск в базе слово в разных кодировках.  [new]
Rustam Ergashev
Member

Откуда:
Сообщений: 219
Простой запрос по поиску
select * 
from clients c
where upper(c.name) like upper('%Иван%') .....


параметр поиска берется из jsp формы. При нажатие кнопки нужно найти все подходящие данные '%Иван%' и заодно '%Ivan%' в латинской транскрипции. Как можно сделать так? Писать функцию или...
Кто то сталкивался с такой проблемой?
19 мар 14, 11:49    [15751512]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в базе слово в разных кодировках.  [new]
-2-
Member

Откуда:
Сообщений: 15330
Rustam Ergashev
Писать функцию или...
пиши функцию
19 мар 14, 11:56    [15751572]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в базе слово в разных кодировках.  [new]
Rustam Ergashev
Member

Откуда:
Сообщений: 219
Поможете начать.
19 мар 14, 14:50    [15753063]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в базе слово в разных кодировках.  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7134
Rustam Ergashev,
translit функция

Берете подходящую и переписываете ее на PL/SQL
19 мар 14, 15:00    [15753153]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в базе слово в разных кодировках.  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Для начала составь таблицу соответствия русских и латинских букв
19 мар 14, 15:01    [15753157]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в базе слово в разных кодировках.  [new]
Corner
Member

Откуда:
Сообщений: 1270
Латинская транскрипция
19 мар 14, 15:09    [15753234]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в базе слово в разных кодировках.  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7134
Rustam Ergashev
Простой запрос по поиску
select * 
from clients c
where upper(c.name) like upper('%Иван%') .....


параметр поиска берется из jsp формы. При нажатие кнопки нужно найти все подходящие данные '%Иван%' и заодно '%Ivan%' в латинской транскрипции. Как можно сделать так? Писать функцию или...
Кто то сталкивался с такой проблемой?

Если искать только имена, то правильнее будет таблица имен
Потому как:
Мария, Маша
Марийка, Мариша, Маря, Мара, Марюня, Маруня, Маруля, Муля, Маруся, Муся, Мася, Масята, Марюта, Марюха, Маруха, Марюша, Маруша, Муша, Маня, Манюня, Манюра, Манюся, Манюта, Манюха, Манюша, Манятка, Мака, Маняша, Маша, Машаня, Машоня, Машука, Машуня, Муня, Машура, Мура, Шура, Машара, Машута, Мута, Машуха, Моря, Масяня
19 мар 14, 15:10    [15753242]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в базе слово в разных кодировках.  [new]
Rustam Ergashev
Member

Откуда:
Сообщений: 219
У меня в базе разные имена
26 мар 14, 10:05    [15787397]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в базе слово в разных кодировках.  [new]
Rustam Ergashev
Member

Откуда:
Сообщений: 219
Нашел функцию.
  FUNCTION translit(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ret VARCHAR2(32000) := p_str;
    l_upper BOOLEAN := FALSE;
  BEGIN
    IF upper(p_str)=p_str THEN 
      l_upper := TRUE;
    END IF; 
    ret := translate(ret, 'АБВГДЕЗИЙКЛМНОПРСТУФХЫЪЬЭ', 'ABVGDEZIYKLMNOPRSTUFHY''''E');
    ret := REPLACE(ret, 'Ж', 'Zh');
    ret := REPLACE(ret, 'Ё', 'Yo');
    ret := REPLACE(ret, 'Ц', 'Ts');
    ret := REPLACE(ret, 'Ч', 'Ch');
    ret := REPLACE(ret, 'Ш', 'Sh');
    ret := REPLACE(ret, 'Щ', 'Sch');
    ret := REPLACE(ret, 'Ю', 'Yu');
    ret := REPLACE(ret, 'Я', 'Ya');
    IF l_upper THEN
       ret := upper(ret);
    END IF;
    -- lowercase 
    RET := TRANSLATE(RET, 'абвгдезийклмнопрстуфхыъьэ', 'abvgdeziyklmnoprstufhy''''e');
    RET := REPLACE(RET, 'ж', 'zh');
    RET := REPLACE(RET, 'ё', 'yo');
    RET := REPLACE(RET, 'ц', 'ts');
    RET := REPLACE(RET, 'ч', 'ch');
    RET := REPLACE(RET, 'ш', 'sh');
    RET := REPLACE(RET, 'щ', 'sch');
    RET := REPLACE(RET, 'ю', 'yu');
    RET := REPLACE(RET, 'я', 'ya');
    RETURN ret;
  END;

Вот как эту функцию использовать внутри LIKE.
26 мар 14, 11:33    [15787992]     Ответить | Цитировать Сообщить модератору
 Re: Поиск в базе слово в разных кодировках.  [new]
yens_gjytk
Member

Откуда: Samara/Saratov
Сообщений: 69
Rustam Ergashev,

а в чем проблема?

select * 
from clients c
where upper(c.name) like upper('%Иван%') or upper(c.name) like upper(translit('%Иван%')).....
26 мар 14, 13:11    [15788790]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить