Operatore LIKE, =, NOT LIKE, <> (Access e SQL Server)

giovedì 25 ottobre 2007 - 12.34

roddik1980 Profilo | Junior Member

Buongiorno a tutti,

ho la necessità di fare un pò di chiarezza sugli operatori in oggetto.

Vorrei sapere per favore se è la stessa cosa usare gli operatori "LIKE" e "=" per estrarre valori completi o parziali (con il carattere jolly * in Access oppure % in SQL Server) ? La domanda vale anche per le loro negazioni "NOT LIKE" e "<>" !

E' la stessa, se il campo è di tipo testo/stringa (char, varchar, nchar ecc), scrivere la seguente query ?

1° caso con caratteri jolly
SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome = 'Ma%'

SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome LIKE 'Ma%'

2° caso con caratteri jolly
SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome <> 'Ma%'

SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome NOT LIKE 'Ma%'

N.B. Se userò access metterò l' * al posto del %

_______________________________________________________________

1° caso senza caratteri jolly
SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome = 'Ma%'

SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome LIKE 'Ma%'

2° caso senza caratteri jolly
SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome <> 'Ma%'

SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome NOT LIKE 'Ma%'


Si ottengono sempre gli stessi risultati oppure no ?

Grazie a tutti e buona giornata.

Mark

lbenaglia Profilo | Guru

>E' la stessa, se il campo è di tipo testo/stringa (char, varchar,
>nchar ecc), scrivere la seguente query ?
Si

>1° caso con caratteri jolly
>SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome
>= 'Ma%'
>
>SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome
>LIKE 'Ma%'
No, la prima query restituisce solo le righe che hanno CampoNome = 'Ma%', mentre la seconda query restituisce tutte le righe che hanno CampoNome che inizia per "Ma".

>2° caso con caratteri jolly
>SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome
><> 'Ma%'
>
>SELECT CampoNome, CampoCognome FROM Tabella1 WHERE CampoNome
>NOT LIKE 'Ma%'
Il discorso è analogo al precedente, ovvero nel primo caso avrai le righe dove CampoNome è diverso da 'Ma%', mentre nel secondo tutte le righe che non iniziano con "Ma".

>Grazie a tutti e buona giornata.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Dampyr Profilo | Junior Member

Credo che facendo un po' di prove ti risponderesti da solo
Cmq, con l'operatore uguale, non ci sono, (aspetto smentite in caso e mi fustigherò) caratteri jolly, il valore inserito tra apici viene cercato nel campo specificato.
I caratteri jolly sono prerogativa invece del like.

... cerca di essere il giocatore di scacchi, non il pezzo sulla scacchiera...

roddik1980 Profilo | Junior Member

Ok grazie per i consigli.

Altra cosa, sapete per quale motivo utilizzando il LIKE e il NOT LIKE in una query MS Access 2003 dopo il salvataggio delle query il LIKE diventa ALIKE e il NOT LIKE diventa NOT ALIKE ? Come mai viene aggiunta la "A" ? Non ne capisco il motivo.... Ma soprattutto è corretto ?

Grazie e buona giornata.

Mark

Dampyr Profilo | Junior Member

Non ti so mica dare una spiegazione precisa a riguardo...
Ho trovato questo: http://msdn2.microsoft.com/en-us/library/aa140104(office.10).aspx

Spero ti possa servire...
Ciao
... cerca di essere il giocatore di scacchi, non il pezzo sulla scacchiera...

falco81 Profilo | Newbie

Buongiorno a tutti....

Ho un problema stupido che però non rieco a risolvere!!!

In Access ho in una maschera una campo isola e voglio fare un controllo con un pulsante di comando se in questo campo viene inserita una parola dove l'ultima lettera sia la P o la B.
Il mio codice è:
If ((TID_Isola Not Like "*P") Or (TID_Isola Not Like "*B")) Then
MsgBox ("Attenzione: ID Isola non valido! Inserisci alla fine del nome la lettera P o la lettera B!")
TID_Isola.SetFocus

GoTo 100
End If

Mi dà problemi al primo rigo dove mi dice che la sintassi è errata e viene selezionata la parola Like...è come se non riconosce Not Like...

Quale sarà il prblema???

Dampyr Profilo | Junior Member

E' da un po' che non mi metto più a programmare in VBA, e devo dire che non sento la mancanza (leggi: se puoi passa a vb.net)
Cmq per risolvere il problema all'evento click del bottone fai questo controllo:

If Right(Me.c_campo.Value, 1) <> "P" Or Right(Me.c_campo.Value, 1) <> "B" Then
MsgBox ("Attenzione: ID Isola non valido! Inserisci alla fine del nome la lettera P o la lettera B!")
End If

Probabilmente, me devi fare delle prove, servirà fare un Lcase prima del controllo, ma ti lascio questa prova

Ciao ciao!

... cerca di essere il giocatore di scacchi, non il pezzo sulla scacchiera...

falco81 Profilo | Newbie

codice perfetto!!
Non c'è stato bisogno di fare un Lcase, funziona perfettamente così..

ma così per curiosità, perchè se faccio il controllo con Like funziona e con Not Like no?? bisogna usare sempre right??

grazie mille...

P.S. sono daccordo con te che Vb è antipatico, spero di finire presto questo progetto!!

Dampyr Profilo | Junior Member

>codice perfetto!!
>Non c'è stato bisogno di fare un Lcase, funziona perfettamente
>così..
>
>ma così per curiosità, perchè se faccio il controllo con Like
>funziona e con Not Like no?? bisogna usare sempre right??

Mmm... hai usato il like?
Io non l'avevo inserito... boh... il right (se non ho capito male, ma dovrei andare a leggere un po' in giro|||| e lo lascio fare volentieri a te ) non fa altro che andare a prendere gli ultimi (right = destra) n valori del campo che gli passi.
E' come fare un substring e fare una comparazione con un valore specificato (es. <> xyz).

>
>grazie mille...
>
>P.S. sono daccordo con te che Vb è antipatico, spero di finire
>presto questo progetto!!

Il VB di suo non è male, ti permette di fare velocemente tante cose che con altri linguaggi sono molto più complicate, il vba è un po' limitato, basta solo entrare nella sua logica però per fare lo steso delle cose carine!
Certo ti consiglio di prendere un buon libro e di studiartelo un po' per entrare appieno nel linguaggio.

Ciao ciao!

... cerca di essere il giocatore di scacchi, non il pezzo sulla scacchiera...

falco81 Profilo | Newbie

No, ho usato il like per fare la prova con la logica contraria e funzionava...
ma cmq...

Invece, con una verifica mirata ho visto che non mi funziona tanto...

questo è il codice:

If Right(Me.TID_Isola.Value, 1) <> "P" Or Right(Me.TID_Isola.Value, 1) <> "B" Then
MsgBox ("Attenzione: ID Isola non valido! Inserisci alla fine del nome la lettera P o la lettera B!")
TID_Isola.SetFocus

GoTo 100
End If

Perchè anche se il campo finisce per P o per B, mi da sempre questo Msg_Box? é come se la condizione dell'if viene sempre ritenuta vera....

Aiutooooooo please...

P.S. ho già scaricato il manuale di VBA e lo sto leggendo piano piano..

lbenaglia Profilo | Guru

>questo è il codice:
>
>If Right(Me.TID_Isola.Value, 1) <> "P" Or Right(Me.TID_Isola.Value,
>1) <> "B" Then
>MsgBox ("Attenzione: ID Isola non valido! Inserisci alla fine
>del nome la lettera P o la lettera B!")
> TID_Isola.SetFocus
>
> GoTo 100
> End If
>
>Perchè anche se il campo finisce per P o per B, mi da sempre
>questo Msg_Box? é come se la condizione dell'if viene sempre
>ritenuta vera....

Infatti, utilizzando l'operatore Or basta che una delle condizioni sia vera per rendere vera l'intera espressione.
Utilizzando invece And la condizione risulterà vera se l'ultimo carattere sarà diverso da "P" E "B" (contemporaneamente).

Un altro modo per esprimere lo stesso concetto potrebbe essere questo:

If Not (Right(Me.TID_Isola.Value, 1) = "P" Or Right(Me.TID_Isola.Value, 1) = "B") Then ...

Se vuoi semplificare l'espressione, ricordati di applicare l'operatore Not ANCHE all'operatore logico Or (Not(Or) = And):

If Right(Me.TID_Isola.Value, 1) <> "P" And Right(Me.TID_Isola.Value, 1) <> "B" Then ...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

falco81 Profilo | Newbie

Perfetto, ora mi funziona...ho controllato tutto e non ci sono problemi!!!

Grazie mille......

Dampyr Profilo | Junior Member

>Perfetto, ora mi funziona...ho controllato tutto e non ci sono
>problemi!!!
>
>Grazie mille......

Pardon, scusate il ritardo ma sono stato stra-incasinato...
Sono contento che ora tutto funzioni!

Peace


... cerca di essere il giocatore di scacchi, non il pezzo sulla scacchiera...
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5