2009-08-17 6 views
5

Czy ktoś wie, czy można wykonać wyszukiwanie% LIKE% z kolumny w bazie danych SQL Server, ale zmusić ją do zignorowania znaków specjalnych w kolumnie?Wyszukaj kolumnę w bazie danych SQL ignorując znaki specjalne

Tak więc, na przykład, jeśli mam kolumnę o nazwie "piosenki" i zawierać następujące ...


czarny lub biały

bez snu „till Brooklyn

statku piosenka

Papa nie głosił


Jeśli użytkownik wyszuka hasło "no sleey till brooklyn", to chciałbym, aby powrócił do dopasowania, mimo że zapomniał dołączyć apostrof. Chciałbym również, aby zwracał czwarty wiersz, jeśli szukał "SOUL". Na pewno masz pomysł ...

Każda pomoc będzie naprawdę doceniona.

Odpowiedz

8

Zajmę się wykorzystaniem indeksu pełnotekstowego, a następnie możesz użyć mocy FREETEXT i ZAWIERA do wyszukiwania.

EDYCJA: W dalszym ciągu zajmuję się dopracowaniem indeksu pełnotekstowego, jednak aby przejść do kolejnej odpowiedzi, jest to opcja przy użyciu REPLACE.

SELECT 
    Artist, 
    Title 
FROM 
    Songs 
WHERE 
    REPLACE(REPLACE(REPLACE(Artist, '#',''), '*', ''), '"', '') LIKE '%Keywords%' 
+0

Dang, pobij mnie do tego. To naprawdę brzmi jak droga, IMO. W rzeczywistości mam teraz do czynienia z podobną sytuacją i właśnie mam zamiar przełączyć się na wyszukiwanie pełnotekstowe. –

+0

Niestety, powodem, dla którego badam możliwość napisania własnych zapytań jest to, że obecnie używamy indeksowania pełnotekstowego i klient go nie lubi, ponieważ twierdzi, że zwraca zbyt wiele nieistotnych wyników! – jonhobbs

+0

@Jon, sprawdziłeś to? http://msdn.microsoft.com/en-us/library/cc879245.aspx –

0

Użyj kombinacji TRANSLATE, UPPER, and TRIM.

+0

Tłumaczenie na serwerze SQL? –

+0

Po prostu szukałem tych funkcji, ale nie mogę znaleźć żadnych informacji. – jonhobbs

+0

Odpowiednikami SQL Server są: UPPER, LTRIM, RTRIM. Nie ma funkcji TRANSLATE, ale możesz użyć wielu funkcji REPLACE dla każdego ze znaków specjalnych. –

1

Będziesz mieć różne postacie do usunięcia. Pojedyncze cudzysłowy, podwójne cudzysłowy, łączniki, kropki, przecinki, itp.

Możesz używać wyrażeń regularnych w swojej klauzuli where i dopasowywać czystą wartość. Read more about regex within SQL here.

Jeśli chodzi o sztukę, w której chcesz zwrócić 4. wiersz dla SOUL .. będziesz potrzebować struktury danych do oznaczania piosenek i będziesz musiał szukać tagów na mecz. Obawiam się, że potrzebujemy więcej szczegółów na temat struktury danych.

+0

Jestem okropny w używaniu Regexa, ale może być w stanie znaleźć regex on line, który usuwa znaki specjalne. Dzięki – jonhobbs