LIKE - Ricerca di un valore

lunedì 22 ottobre 2007 - 18.09

gae58 Profilo | Senior Member

salve,

scusate la domanda forse banale, ma non mi è chiaro il comportamento di '%' LIKE '%'.
In se dovrebbe restituire tutti i rekord che hanno nel campo almeno un valore uguale al valore della ricerca a prescindere dalla posizione in cui si trovano.

Io però vorrei far ricercare solo i valori che iniziano per il valore inserito.
Cerco di spiegarmi meglio:
ho una textbox e vorrei far visualizzare in una grid tutti i movimenti che iniziano per 'Bene' e non che contengano bene in qualsiasi posizione del campo.
la query pensavo di costruirla in questa maniera:
... where campo LIKE @campo +'%'

ma in ogni caso mi visualizza tutti i rekord che hanno all'interno bene in qualsiasi punto.

Ciò significa che l'operatore % non si comporta come una wildcard

qualche suggerimento?

grazie

Gaetano

alx_81 Profilo | Guru

>salve,
ciao!

>... where campo LIKE @campo +'%'
>ma in ogni caso mi visualizza tutti i rekord che hanno all'interno
>bene in qualsiasi punto.
mmmmmh... ti faccio un esempio che prova il contrario..

USE tempdb; GO CREATE TABLE dbo.Ricerche ( id int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, nome varchar(200) NOT NULL ) GO -- popolo la tabella INSERT INTO dbo.Ricerche SELECT 'Alessandro Alpi' INSERT INTO dbo.Ricerche SELECT 'Lorenzo Benaglia' INSERT INTO dbo.Ricerche SELECT 'David De Giacomi' INSERT INTO dbo.Ricerche SELECT 'Marco Caruso' INSERT INTO dbo.Ricerche SELECT 'Matteo Raumer' INSERT INTO dbo.Ricerche SELECT 'Ester Memoli' GO -- creo la procedura di ricerca CREATE PROCEDURE dbo.proc_Ricerca @valore varchar(200) AS BEGIN SET NOCOUNT ON; SELECT * FROM dbo.Ricerche WHERE nome LIKE @valore + '%' END GO -- eseguo la procedura EXEC dbo.proc_Ricerca 'Ma' GO /* id nome ----------- -------------------------------------------------------------------- 4 Marco Caruso 5 Matteo Raumer */ -- pulizia DROP TABLE dbo.Ricerche DROP PROCEDURE dbo.proc_Ricerca

>Ciò significa che l'operatore % non si comporta come una wildcard
è un wildcard
http://msdn2.microsoft.com/en-us/library/ms189454.aspx

Controlla meglio il tuo codice sicuramente succede qualcosa di strano..
Alx81 =)

http://blogs.dotnethell.it/suxstellino

gae58 Profilo | Senior Member

ciao,

ho provato il tuo esempio e funziona.
L'ho provato all'interno del mio codice:
strQuery = (" WHERE Targa LIKE 'AB%'");
e funziona.

Però devo utilizzarlo ocn un paramentro e non sono riuscito a capire dove sbaglio con l'operatore %. Le ho provate tutte
strQuery = (" WHERE Targa LIKE @Targa '%' ");
mi ritorna l'errore:
Sintassi non corretta in prossimità di '%'.

Ho provato con " e l'operatore +, ma niente da fare.
Che dici?


Forse con i parametri non si può applicare la clausola WHERE?

alx_81 Profilo | Guru

>ciao,
>
>Però devo utilizzarlo ocn un paramentro e non sono riuscito a
>capire dove sbaglio con l'operatore %. Le ho provate tutte
> strQuery = (" WHERE Targa LIKE @Targa '%' ");
>mi ritorna l'errore:
>Sintassi non corretta in prossimità di '%'.
>
>Ho provato con " e l'operatore +, ma niente da fare.
>Che dici?
cosa passi al parametro?
prova a postare il codice..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

gae58 Profilo | Senior Member

all'interno dellSqlDataSource ho inserito un parametro:
<SelectParameters>
<asp:ControlParameter ControlID="txtCerca" Name="Targa" PropertyName="Text" DefaultValue="[A-Z]" />
</SelectParameters>

e nel codice cs definisco la where con il like:
strQuery = (" WHERE Targa LIKE @Targa");

Se nel textbox scrivo "AB%" mi funziona


Gaetano

alx_81 Profilo | Guru

>all'interno dellSqlDataSource ho inserito un parametro:
> <SelectParameters>
><asp:ControlParameter ControlID="txtCerca" Name="Targa" PropertyName="Text"
>DefaultValue="[A-Z]" />
> </SelectParameters>
>
>e nel codice cs definisco la where con il like:
>strQuery = (" WHERE Targa LIKE @Targa");
>
>Se nel textbox scrivo "AB%" mi funziona
prova ad usare un Parameter normale, non un control parameter.. e ad aggiungere il percento quando vai ad assegnare il valore.
ad esempio:
<asp:SqlDataSource ID="SQLSource" runat="server" ProviderName="System.Data.SQLClient" ConnectionString="Data Source=TUOSERVER; Initial Catalog=TUODB; Integrated Security=SSPI;" SelectCommand="SELECT Campo1, Campo2 FROM Tabella WHERE campo1 LIKE @param1"> <SelectParameters> <asp:Parameter Name="param1" Size="20" Type="String" DefaultValue="" /> </SelectParameters> </asp:SqlDataSource>

e nel codice
SQLSource.SelectParameters("param1").DefaultValue = TxtBox.Text & "%"
Alx81 =)

http://blogs.dotnethell.it/suxstellino

gae58 Profilo | Senior Member

non so che dirti.

Il codice è scritto in un bottone che deve controllare l'indice scelto ed effettuare la where con il like attravesro una variabile ed attivata attraverso un selectcommand. In più se il campo è vuoto si posiziona sul primo movimento.

Pensavo che con i parametri fosse possibile.

grazie
Gaetano

alx_81 Profilo | Guru

>non so che dirti.
hai provato col parametro normale?
Alx81 =)

http://blogs.dotnethell.it/suxstellino

gae58 Profilo | Senior Member

sinceramente no, in quanto dovrei cambiare buona parte del codice e non sono ancora abbastanza esperto per capire il tutto.

Per esempio non so la differenza tra ControlParameter e Parameter.

Scusa la domanda, ma nella stessa routine effettuo la ricerca per data, ma non mi funziona lo stesso, si deve cambiare qualcosa?


Gaetano

gae58 Profilo | Senior Member

allora,

dopo tanti tentativi ci sono riuscito.

La sintassi è questa:
strQuery = (" WHERE Targa LIKE + @Targa + '%'");

per la data hai qualche suggerimento?

ciao
Gaetano

alx_81 Profilo | Guru

>per la data hai qualche suggerimento?
in che senso? qual è il problema sulla data?

Alx81 =)

http://blogs.dotnethell.it/suxstellino

gae58 Profilo | Senior Member

nel senso che utilizzando questo codice non mi trova la data:
strQuery = (" WHERE DataCarico=@DataCarico");


Gaetano

alx_81 Profilo | Guru

>nel senso che utilizzando questo codice non mi trova la data:
> strQuery = (" WHERE DataCarico=@DataCarico");
Fai attenzione a come è salvata la data nel campo DataCarico.
Ad esempio, se ha ore/minuti/secondi diversi, l'uguaglianza non si verificherà mai.
Oppure fai attenzione al formato.
In ogni modo ti consiglio di interrogare il database col formato ISO SSAAMMGG, se non ti interessa l'ora.
Nel caso in cui passi una data con quel formato ma la data sul database è salvata con un orario diverso dalle 00:00:00.000, devi fare una where simile a questa:

WHERE CONVERT(char(8),DataCarico,112) = @DataCarico


>
>
>Gaetano

Alx81 =)

http://blogs.dotnethell.it/suxstellino
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