Query full-text

martedì 04 novembre 2014 - 07.44

zseven Profilo | Senior Member

Buongiorno ragazzi,
sto provando ad utilizzare le full text in quanto credevo potessero essere la soluzione al mio problema.

In pratica il valore nel campo del database è il seguente:
EOL-5FBECCU-EG
io ho la necessità di restituire questo valore anche se non vengono immessi i trattini o magari ne viene messo uno solo e cioè
EOL5FBECCUEG
EOL-5FBECCUEG
e così via.

Ho creato l'indice sulla tabella ed ho provato ad avviare questa semplice query

SELECT part_number_base FROM tab_prodotti_base WHERE CONTAINS(part_number_base, 'EOL5FBECCUEG');

ma non mi viene restituito nulla.
Ho sbagliato qualcosa?

Grazie mille per l'aiuto

ma_di Profilo | Junior Member

Ciao.
Hai provato con LIKE giocando un po' con i caratteri jolly * e % ?

zseven Profilo | Senior Member

Ciao,
sì ci ho provato un po', ma non sono riuscito a trovare una soluzione.
Credo che il full-text possa essere la strada migliore, anche in termini di prestazioni da quello che ho letto.

Nessuno sa aiutarmi?

ma_di Profilo | Junior Member


Prova così

SELECT Name
FROM tabella
WHERE Name LIKE 'eol%';

zseven Profilo | Senior Member

Perdonami ma come ti ho detto questa soluzione non è sufficiente per risolvere il mio problema.

Spero che qualcuno possa aiutarmi a capire il funzionamento della full-text.

gsistemi Profilo | Junior Member

se il problema sono solo i trattini usa il comando REPLACE
select * from tabella where campo = replace( @val, '-', '' )
dove @val è il valore inserito dall'utente

zseven Profilo | Senior Member

sì infatti stavo provando a fare proprio questo, ed ho scritto il codice che leggi sotto, ma mi viene restituito errore.
Credo che il problema siano gli apici:

SqlArticolo.FilterParameters.Add("@nome_prodotto_det", Data.DbType.String, Replace(Nome, "-", ""))
SqlArticolo.FilterExpression = "REPLACE(part_number_base, '-', '') LIKE '%{0}%'"

Sai dirmi come posso fare a risolvere?

Grazie mille

gsistemi Profilo | Junior Member

oddio non ho mai usato questi comandi e non saprei aiutarti però potresti provare a mettere il replace nel FilterExpression

SqlArticolo.FilterParameters.Add("@nome_prodotto_det", Data.DbType.String, Nome)
SqlArticolo.FilterExpression = "REPLACE(part_number_base, '-', '') LIKE '%' + Replace({0}, '-','') + '%'"

Però potrebbe essere una stupidagine!

zseven Profilo | Senior Member

purtroppo mi dà errore già da prima con il REPLACE, nello specifico l'errore restituito è il seguente:
L'espressione contiene una chiamata di funzione indefinita: REPLACE().

SqlArticolo.FilterParameters.Add("@nome_prodotto_det", Data.DbType.String, Nome)
SqlArticolo.FilterExpression = "REPLACE(part_number_base, '-', '') LIKE '%{0}%' "

Come vedi ho messo solo il primo replace, ed è già qui che va in errore, mannaggia.

Nessuna idea?

gsistemi Profilo | Junior Member

la funzione REPLACE è per i DB Sql Server controlla se la funzione REPLACE e la sua sintassi per il tuo DB è quella

zseven Profilo | Senior Member

La sintassi è corretta.
Se metto infatti tutta all'interno della stringa SQL, o se la provo direttamente su MSSQL funziona correttamente.

Il problema nasce con la filtreexpression

gsistemi Profilo | Junior Member

per aiutarti mi servirebbe il codice intero perchè non ho un mio esempio dove provarlo

zseven Profilo | Senior Member

eh immagino, purtroppo passarti tutto il codice è impossibile perché questa è solo una piccolissima parte, però diciamo che se hai la possibilità di provare, e ti ringrazio moltissimo per questo, puoi fare la prova con una qualsiasi tabella di un tuo qualsiasi progetto dove c'è un campo di testo che contiene valori come questi "AFD-EFGREG-AA" e fare una query super semplice come
SELECT *FROM tab_test
e nella filterexpression ci aggiungi la condizioni.

Anche se lo fai in progettazione e non in code behind ti viene restituito l'errore sul REPLACE.

Grazie ancora

gsistemi Profilo | Junior Member

mi serve solo la parte di codice dove sono incluse queste istruzioni perchè, ad esempio, non so SqlArticolo che cos'è, poi le tabelle e il resto faccio un esempio.

SqlArticolo.FilterParameters.Add("@nome_prodotto_det", Data.DbType.String, Nome)
SqlArticolo.FilterExpression = "REPLACE(part_number_base, '-', '') LIKE '%' + Replace({0}, '-','') + '%'"
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5