sql >> Database >  >> RDS >> Mysql

mysql:waarom geeft het vergelijken van een 'string' met 0 waar?

MySQL cast automatisch een string naar een nummer:

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

en een string die niet begint met een getal wordt geëvalueerd als 0:

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

Als we een string proberen te vergelijken met een andere string, is er natuurlijk geen conversie:

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

maar we kunnen een conversie forceren met bijvoorbeeld een + operator:

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

laatste zoekopdracht geeft TRUE terug omdat we een string '0string' met een getal 0 optellen, dus de string moet worden geconverteerd naar een getal, het wordt SELECT 0 + 0 = 'string' en dan wordt de string 'string' opnieuw geconverteerd naar een getal voordat het wordt vergeleken met 0, en het wordt dan SELECT 0 = 0 wat WAAR is.

Dit zal ook werken:

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

en retourneert de som van de tekenreeksen die zijn geconverteerd naar getallen (1 + 2 in dit geval).



  1. Concat-groepen in SQL Server

  2. Hoe REGEXP_INSTR() werkt in MariaDB

  3. Een vergelijking tussen de MySQL Clone Plugin en Xtrabackup

  4. Hoe vastgoedbeheerders de efficiëntie kunnen verbeteren met een database