Newsgroup: it.comp.software.database
Titolo: [MySQL] not like e apice

salve a tutti,
MySQL 4.0.13-log in esecuzione sul server: (semplificando) ho una tabella 
con un campo di tipo varchar al cui interno ho dati del tipo
'L\'aiutante'
'L\'abate'
....
il problema è che query di questo tipo
SELECT campo FROM tabella
WHERE campo NOT LIKE  'L\'abate'
SELECT campo FROM tabella
WHERE campo <>  'L\'abate'
mi ritornano sempre e comunque anche il record
'L\'abate'
ho verificato anche con il client mysql che il valore contenuto nel campo 
sia effettivamente la stringa L\'abate pensando che phpMyAdmin mi elaborasse 
i risultati prima di mostrarli...
qualche idea su come risolvere questo inconveniente e su eventuli cause?
grazie
Mario

                    Il 04 Ott 2004, 09:58, "Mario Protto" <mario AT mario-online DOT
c...@usaquelloprimadichiocciola.invalid> ha scritto:

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 qualche idea su come risolvere questo inconveniente e su eventuli cause?
prova a vedere che non sia un bug segnalato per quella versione, anche se mi
pare molto strano. Per altre cause non so ma ci penso :)
Ciao



beh il fatto è che io nel db non ho la stringa L'abate ma la stringa 
L\'abate...e che neanche con
mysql> select * from prova where prova <> 'L\\\'abate';
riesco ad escluderlo...
Mario 

 Prova con questa  :
        select * from prova1 where nome not like "L\\\\\\'Abate";
Ciao ReDiCuori
-- 
L'informatica è un' arte
---------------------------------------------------------
 
www.pascallike.too.it
 
http://utenti.lycos.it/pascallike
 il sito sulla programmazione pascal
 sorgenti, tutorial ed utility
------------------------------------------------------------
www.treves-srl.com
Libreria Internazionale Treves
Via Toledo 249/250 Napoli
------------------------------------------------------------
www.alphalibri.com
Vendita ingrosso di libri
Via S.Anna dei Lombardi 10 , Napoli
--------------------------------------------------------- 

 L\'abate...
ops :)
Allora:
mysql> select * from prova;
+------+-------------+
| id | prova |
+------+-------------+
| 1 | L'aiutante |
| 2 | L'abate |
| 3 | L\'aiutante |
| 4 | L\'abate |
+------+-------------+
4 rows in set (0.00 sec)
mysql> select * from prova where prova not like 'L\\\\\'abate';
+------+-------------+
| id | prova |
+------+-------------+
| 1 | L'aiutante |
| 2 | L'abate |
| 3 | L\'aiutante |
+------+-------------+
3 rows in set (0.00 sec)
Ciao !


> mysql> select * from prova where prova not like 'L\\\\\\'abate';
ok questa è la "versione" che funziona..con 6 \ per capirci, adesso però mi 
piacerebbe capire perchè...se non chiedo troppo...in pratica se tolgo i \ di 
escape avrei la stringa L\\\'abate mentre nel db ho L\'abate...perchè per 
comparare le due stringhe devo utilizzare l'escape due volte ?
grazie ancora
Mario

 Mario 
Darkbyte
-- 
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|

 comparare le due stringhe devo utilizzare l'escape due volte ?
non so, sto cercando di capirlo anche io.
Oltretutto se usi '=' al posto del 'like' tutto funziona come ci aspettiamo
e il motore delle espressioni regolari dovrebbe essere uguale per tutti i
comandi (non vedo il motivo per separarlo a seconda del comando) ...
Mha, la ricerca continua ...


 Io ci riesco tranquillamente (4.1.4-gamma-nt):
che c'entri qualcosa il fatto che il tuo gira su Microsoft e il mio su Linux 
? Oppure nella versione che indichi sono state fatte delle modifiche in tal 
senso o ancora abbiamo delle diverse configurazioni?
ciao
Mario 

 > comparare le due stringhe devo utilizzare l'escape due volte ?
Ecco la parte che spiega il tutto:
Note: Because MySQL uses the C escape syntax in strings (for example, `\n'
to represent newline), you must double any `\' that you use in your LIKE
strings. For example, to search for `\n', specify it as `\\n'. To search for
`\', specify it as `\\\\' (the backslashes are stripped once by the parser
and another time when the pattern match is done, leaving a single backslash
to be matched).
Il link nella documentazione e' questo:
http://dev.mysql.com/doc/mysql/en/String_comparison_functions.html
Ciao
Fabrizio


 
http://dev.mysql.com/doc/mysql/en/String_comparison_functions.html
ahhh...ecco...
grazie per il link allora...
Mario 

 Mario 
Ciauz :)
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).



MySQL supporta gli apici semplici e doppi. Usando la forma
"L'abate"
in casi come questo ti semplifichi la vita.
Comunque anche la forma
'L''abate'
funziona.
L'apice ripetuto equivale a \'
mysql> select * from prova;
+------------+
| a          |
+------------+
| L'abate    |
| L'aiutante |
+------------+
2 rows in set (0.00 sec)
mysql> select * from prova where a not like "L'abate";
+------------+
| a          |
+------------+
| L'aiutante |
+------------+
1 row in set (0.28 sec)
Ciao
gmax
-- 
   ____ ____  _____ _   _
  / _  |    \(____ ( \ / )
( (_| | | | / ___ |) X (
  \___ |_|_|_\_____(_/ \_)
(_____|
MySQL Certified Professional
Sapere, saper fare, fare, far sapere
http://gmax.oltrelinux.com