Mysql
 sql >> Database >  >> RDS >> Mysql

mysql:perché confrontare una "stringa" con 0 dà true?

MySQL esegue automaticamente il cast di una stringa su un numero:

SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)

e una stringa che non inizia con un numero viene valutata come 0:

SELECT 'string' = 0 AS res;  -- res = 1 (true)

Ovviamente, quando proviamo a confrontare una stringa con un'altra stringa non c'è conversione:

SELECT '0string' = 'string' AS res; -- res = 0 (false)

ma possiamo forzare una conversione usando, ad esempio, un operatore +:

SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)

l'ultima query restituisce TRUE perché stiamo sommando una stringa '0string' con un numero 0, quindi la stringa deve essere convertita in un numero, diventa SELECT 0 + 0 = 'string' e poi di nuovo la stringa 'stringa' viene convertita in un numero prima di essere confrontata con 0, e quindi diventa SELECT 0 = 0 che è VERO.

Funzionerà anche:

SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3

e restituirà la somma delle stringhe convertite in numeri (1 + 2 in questo caso).