Trova la corrispondenza di un valore nel db ignorando alcuni valori

venerdì 14 settembre 2012 - 16.12
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  SQL Server 2008 R2

zseven Profilo | Senior Member

Ciao ragazzi,
forse il titolo non è del tutto chiarissimo, quindi cerco di spiegarmi al meglio.

Nel database ho dei valori di questo tipo:
7MBP100RA-120
6MBP75RA-060
2SJ475-01
HS-PHB50V4B15
EEH02-4WR-USB-CDR3

Come vedete sono delle sigle con all'interno anche dei trattini che possono capitare in qualsiasi punto del valore, una o più volte.

Ho la necessità di avere la corrispondenza per questo valore anche se nel campo della ricerca viene inserito un valore senza trattino, ad esempio:
Se scrivo 2SJ47501 mi dovrà trovare-> 2SJ475-01
Se scrivo 7MBP100RA120 mi dovrà trovare-> 7MBP100RA-120

Avevo pensato che si poteva creare un altro campo nel db, "CodiceSenzaTrattino", che veniva riempito all'atto dell'inserimento del prodotto, però così vado a duplicare dei valori e devo fare molte modifiche.

Sapreste per caso indicarmi qualche altre soluzione?
Grazie mille!

dupperelko Profilo | Junior Member

Ciao,
che tipo di database è?
Sql server?

ciao

zseven Profilo | Senior Member

Ciao,
sì esatto è un 2008 r2.

Esiste qualche funzione implicita che si può richiamare nella SELECT?

alx_81 Profilo | Guru

>Ciao,
>sì esatto è un 2008 r2.
Ciao
>Esiste qualche funzione implicita che si può richiamare nella SELECT?
Per fare quello che ti serve con una REPLACE(che_stringa, cosa, con_cosa) ti dovrebbe bastare.. solo che c'è un problema di fondo, che succede se ti trovi questi valori?

ABC-DEF
e
AB-CD-EF

in questo caso entrambi sono uguali a ABCDEF dopo la replace.. e rischi di sbagliare, non trovi?

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

dupperelko Profilo | Junior Member

Se vuoi qualcosa di performante, devi lavorare con le ricerche full-text (SQL Server)... guarda qui:

http://msdn.microsoft.com/it-it/library/ms142571%28v=SQL.100%29.aspx

ciao

zseven Profilo | Senior Member

Ciao scusare se riprendo solo ora ma con mille impegni non ho avuto un briciolo di tempo.

Dunque ho provato a fare come dici tu Alx, ma mi restituisce errore.
Ho una SelectCommand inline, poi code behind mi richiamo una filterexpressiona seconda dei casi, e nel caso mio è così:

SqlProdotti.FilterExpression = "Replace(nome_prodotto, '-', '') LIKE '%{0}%'"

L'errore è:
L'espressione contiene una chiamata di funzione indefinita: Replace()

alx_81 Profilo | Guru

>SqlProdotti.FilterExpression = "Replace(nome_prodotto, '-', '') LIKE '%{0}%'"
>L'espressione contiene una chiamata di funzione indefinita: Replace()
non puoi scrivere T-SQL diretto dentro la FilterExpression.
Devi seguire la sintassi indicata qui:
http://msdn.microsoft.com/en-US/library/system.data.datacolumn.expression(v=vs.100).aspx

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5