Как сделать поиск минуя символ тире?

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Как сделать поиск минуя символ тире?

Сообщение Atil » 18.12.2005 (Вс) 14:33

Мне нужно сделать запрос, чтобы при этом не учитывался символ тире.

К примеру. В таблице есть номера
123456
123-456
12345-6
12-34-56
123 456
12 34 56

нужно чтобы при поиске номера 123456 выводились все эти строки.
Или наоборот, при поиске 12-34 56 тоже всё находилось.

и т.д.

Как реализовать запрос SQL?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 18.12.2005 (Вс) 16:03

для какой базы?

если для MSSQL, то нужно использовать ф-ю Replace

Код: Выделить всё
select filed1 from table1 where REPLACE(Field1,'-','')='123456'

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 18.12.2005 (Вс) 18:19

а как это завязать с этим запросом?
Код: Выделить всё
SELECT * FROM smart WHERE Поле3 & Поле4 LIKE '%"& request.form("search") &"%'

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 18.12.2005 (Вс) 20:40

Поле3 & Поле4 - это что-то непонятное, такого быть не должно

а что за база даных, все-таки?
я так понимаю, что это кусок выдран из страницы ASP :?:

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 18.12.2005 (Вс) 21:04

Да, это из ASP

у меня база в Access

я делаю поиск в полях Поле3 и Поле 4, если есть совпадения, то выдираю инфу.

Это поиск запчасти по прайсу.
Просто в некоторых прайсах номер запчасти может быть вида 1234-5678 а в другом прайсе просто 12345678

У меня ведется поиск по всем прайсам.. ну и соответственно, если это не учесть, то много позиций просто не найдутся.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 19.12.2005 (Пн) 9:56

Atil писал(а):У меня ведется поиск по всем прайсам.. ну и соответственно, если это не учесть, то много позиций просто не найдутся.


Я просто делал в таблице поле в котором приводил шифр продукции (к примеру) заранее к формату удобному для поиска. То есть удалял пробелы, заменял русские буквы со схожим написанием на латинские (можно и наоборот) так как в базе были шифры со смешанными символами. После чего соответственно обработывалась строка поиска и все прекрасно и быстро находилась. Причем безо всяких проблем.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 19.12.2005 (Пн) 12:00

Код: Выделить всё
SQL="SELECT * FROM smart " & _
        "WHERE " & _
        "Поле4 LIKE '%"& Replace(request.form("search"),"-","") & "%'"

может так :?:

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 19.12.2005 (Пн) 14:19

Код: Выделить всё
select * from имя_таблицы where replace(имя_поля,"-","") like "*" & искомая_строка & "*"

если не будет работать то заместо звездочек поставь проценты.

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 19.12.2005 (Пн) 15:53

Да последнее до чего я дошел, как раз до этого. Но почему-то так не работает!

500 Внутрення ошибка сервера

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 20.12.2005 (Вт) 12:01

Никто незнает? а? :roll:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 20.12.2005 (Вт) 12:20

ты бы свой кусок кода кинул сюда, где этот запрос присутствует, а то вообще не понятно, что и как ты делаешь

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 20.12.2005 (Вт) 12:55

Код: Выделить всё

mysearch = replace (request.form("search"),"-","%")

SQLstring1 = "SELECT * FROM smart WHERE Поле3 LIKE '%"& mysearch &"%'"

Response.Write "<td>" & RsSearch.fields("Поле3") & "</td>"

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 20.12.2005 (Вт) 13:11

Код: Выделить всё
mysearch = replace (request.form("search"),"-","")

sqlstring1 = "SELECT * FROM smart WHERE Replace(Поле3,""-"","""") LIKE '*" + mysearch + "*'"

Response.Write "<td>" & RsSearch.fields("Поле3") & "</td>"

такой же вариант попробуй с % заместо *

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 20.12.2005 (Вт) 14:15

да пробовал уже......... :cry:

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 20.12.2005 (Вт) 15:10

Что-то ты неправильно делаешь, текст запроса я тебе правильный дал.
Проверяй свои запросы сначала в самом ацесе, а уж потом в код вставляй. Вот тебе пример твоего рабочего запроса- выборка без учета пробелов и тире:
У вас нет доступа для просмотра вложений в этом сообщении.

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 21.12.2005 (Ср) 16:18

дело в том, что если этот запрос потом перенести в ASP он ругается.. :cry:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 21.12.2005 (Ср) 17:05

похоже, что за тебя придется все написать :twisted:
приложи сюда свою базу и страничку ASP, которую надо исправить.

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 21.12.2005 (Ср) 23:10

вот
У вас нет доступа для просмотра вложений в этом сообщении.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 22.12.2005 (Чт) 13:12

куча багов у тебя.
и еще вопрос: что ты забиваешь в качестве строки поиска :?:
что ищещь?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 22.12.2005 (Чт) 13:24

вот что-то работает, но пока не понятно, что ты хочешь получить
У вас нет доступа для просмотра вложений в этом сообщении.

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 22.12.2005 (Чт) 16:00

Хм, по тому, что Вы прислали, у меня вообще ничего не ищется...

а по сути, это тоже самое, что было...


Я так понял, что на данный момент проблема в том, что функция replace в запросе в ASP запрещена к использованию.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 22.12.2005 (Чт) 18:19

она не в ASP запрещена, а в Access , если работать с ним через ADO :!:

если же использовать MSSQL, то все будет как надо

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 23.12.2005 (Пт) 13:35

Ясно, так что делать мне?Я идиот! Убейте меня, кто-нибудь!??

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.12.2005 (Пт) 14:33

нормализовывать свои таблицы, а уже потом делать поиск

Atil
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 18.12.2005 (Вс) 14:30

Сообщение Atil » 26.12.2005 (Пн) 11:46

так и сделал!

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

Спасибо всем за помощь!

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 29.01.2006 (Вс) 13:15

Andrey Fedorov писал(а):Я просто делал в таблице поле в котором приводил шифр продукции (к примеру) заранее к формату удобному для поиска. То есть удалял пробелы, заменял русские буквы со схожим написанием на латинские (можно и наоборот) так как в базе были шифры со смешанными символами. После чего соответственно обработывалась строка поиска и все прекрасно и быстро находилась. Причем безо всяких проблем.

А как ты делал такую нормализацию?
Я пробую в цикле пройтись по таблице. NormalizeCode -- ф-ия, которая удаляет лишние пробелы, тире и т.д.
Код: Выделить всё

Do While Not rs.EOF
        s = rs.Fields("item").Value
        rs.Fields("itemc").Value = NormalizeCode(s)
        rs.Update
        rs.MoveNext
    Loop

Но на таблице ~200 тыс. записей это занимает около 3-4 мин. (а таких таблиц несколько). Наверное можно существенно ускорить процесс, или у тебя тот же принцип?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList