Firebird. Поиск по словам целиком.
Модератор: Модераторы
Firebird. Поиск по словам целиком.
Как в select записать условие, при котором выборка шла по записям где есть искомое слово, но не производные от этого слова, с учетом того, что вокруг это того слова был не только пробел (с этим то вопросов не было бы), а и различные скобки, знаки препинания и д.р.
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Re: Firebird. Поиск по словам целиком.
like ? Не оно?
Re: Firebird. Поиск по словам целиком.
like вместе со словом МИР найдет МИРЫ, СМИРНЫЙ.
А мне надо именно МИР, с вариантами "МИР", (МИР), МИР, , МИР. и т.д.
А мне надо именно МИР, с вариантами "МИР", (МИР), МИР, , МИР. и т.д.
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Re: Firebird. Поиск по словам целиком.
Может, на http://www.sql.ru точнее и быстрее ответят? 
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
Re: Firebird. Поиск по словам целиком.
Через OR разные варианты условий для Like не пробовали перечислить, только поиск соответственно будет долгим..
Re: Firebird. Поиск по словам целиком.
Ustas писал(а):"МИР", (МИР), МИР, , МИР. и т.д.
Код: Выделить всё
Containing '"МИР"' or Containing '(МИР)' or Containing 'МИР,' or Containing 'МИР.' or ...-
Valentin
- незнакомец
- Сообщения: 9
- Зарегистрирован: 24.01.2006 19:45:56
- Откуда: Болгария
- Контактная информация:
Re: Firebird. Поиск по словам целиком.
Юстас, написал процедура о твоем проблеме.
Таблица -> Резултат:
"МИР" -> "МИР"
(МИР) -> (МИР)
xxxМИР, -> МИР,
xxxxМИРxxx -> МИР
"МИР. -> "МИР.
xx"МИР"хх - > "МИР"
Таблица -> Резултат:
"МИР" -> "МИР"
(МИР) -> (МИР)
xxxМИР, -> МИР,
xxxxМИРxxx -> МИР
"МИР. -> "МИР.
xx"МИР"хх - > "МИР"
Код: Выделить всё
CREATE OR ALTER PROCEDURE SELECT_NEAR (
VAL_INPUT VARCHAR(15) )
RETURNS (
BUF VARCHAR(15),
OUT_STR VARCHAR(15) )
AS
DECLARE VARIABLE first_char_pos INTEGER;
DECLARE VARIABLE last_char_pos INTEGER;
DECLARE VARIABLE left_char_pos INTEGER;
DECLARE VARIABLE right_char_pos INTEGER;
DECLARE VARIABLE prefix VARCHAR(1);
DECLARE VARIABLE suffix VARCHAR(1);
BEGIN
FOR SELECT f1 FROM T1 WHERE f1 CONTAINING :val_input INTO :buf
DO
BEGIN
out_str = val_input;
first_char_pos = POSITION(val_input IN buf);
IF (first_char_pos < 1) THEN first_char_pos = 1;
last_char_pos = first_char_pos + CHAR_LENGTH(val_input) - 1;
IF (first_char_pos > 1) THEN
left_char_pos = first_char_pos - 1;
ELSE
left_char_pos = 1;
right_char_pos = last_char_pos + 1;
prefix = '';
suffix = '';
IF (SUBSTRING(buf from left_char_pos for 1) IN ('"', '(', ')', ',', '.')) THEN
prefix = SUBSTRING(buf from left_char_pos for 1);
IF (SUBSTRING(buf from right_char_pos for 1) IN ('"', '(', ')', ',', '.')) THEN
suffix = SUBSTRING(buf from right_char_pos for 1);
out_str = prefix || out_str || suffix;
SUSPEND;
END
END
Re: Firebird. Поиск по словам целиком.
Спасибо за варианты, попробую, для полного
, SIMILAR TO помучить... 
Re: Firebird. Поиск по словам целиком.
Вот как-то так:
Хотя, так до конца и не разобрался с синтаксисом...
Код: Выделить всё
SELECT поле FROM таблица
WHERE поле SIMILAR TO '_%[[:SPACE:]!"#$%&,-.]поиск_*'
OR поле SIMILAR TO 'поиск_*'
ORDER BY поле
Хотя, так до конца и не разобрался с синтаксисом...
