2009-08-17 18 views
5

Qualcuno sa se è possibile eseguire una ricerca% LIKE% su una colonna in un database SQL Server ma ottenerlo per ignorare eventuali caratteri speciali nella colonna?Colonna di ricerca nel database SQL che ignora i caratteri speciali

Così, per esempio se ho una colonna chiamata "canzoni" e contenere le seguenti ...


Black Or White

No Sleep 'fino a Brooklyn

The Ship canzone

Papa Do not Preach


Se l'utente cerca "no sleey till brooklyn", mi piacerebbe che restituisse una corrispondenza anche se si è dimenticato di includere l'apostrofo. Mi piacerebbe anche che restituisse la quarta riga se cercano "ANIMA". Sono sicuro che tu abbia avuto l'idea ...

Qualsiasi aiuto sarebbe davvero apprezzato.

risposta

8

Vorrei esaminare utilizzando un indice di testo completo e quindi è possibile utilizzare la potenza di FREETEXT e CONTAINS per effettuare la ricerca.

EDIT: Vorrei ancora esaminare la ricerca dell'indice del testo completo, tuttavia, per continuare da un'altra risposta, questa è un'opzione che utilizza REPLACE.

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

Dang, bastonatemi. Sembra davvero la strada da percorrere, IMO. In effetti sto affrontando una situazione simile in questo momento e sto per passare alla ricerca full-text. –

+0

Sfortunatamente, la ragione per cui sto studiando la possibilità di scrivere le nostre query per questo è che attualmente usiamo l'indicizzazione full-text e il client non gli piace perché dicono che restituisce troppi risultati irrilevanti! – jonhobbs

+0

@ Jon, hai guardato in questo? http://msdn.microsoft.com/en-us/library/cc879245.aspx –

0

Utilizzare una combinazione di TRANSLATE, UPPER, and TRIM.

+0

Traduci in SQL Server? –

+0

Ho appena effettuato una ricerca per queste funzioni ma non sono riuscito a trovare alcuna informazione. – jonhobbs

+0

Gli equivalenti di SQL Server sono UPPER, LTRIM, RTRIM. Non esiste una funzione TRANSLATE ma è possibile utilizzare più funzioni REPLACE per ciascuno dei tuoi caratteri speciali. –

1

Avrai vari caratteri da rimuovere. Virgolette singole, virgolette doppie, trattini, virgole, ecc.

È possibile utilizzare le espressioni regolari nella clausola where e eseguire una corrispondenza sul valore clean. Read more about regex within SQL here.

Per quanto riguarda l'arte in cui si desidera restituire la quarta riga per ANIMA .. sarà necessario una struttura dati per taggare i brani e sarà necessario cercare i tag per la corrispondenza. Temo che avremo bisogno di maggiori dettagli sulla struttura dei dati per questo.

+0

Sono terribile nell'usare il Regex ma posso trovare una regex on line che rimuove i caratteri speciali. Grazie – jonhobbs

Problemi correlati