sql >> Databasteknik >  >> RDS >> Mysql

mysql:varför att jämföra en 'sträng' med 0 ger sant?

MySQL kastar automatiskt en sträng till ett 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)

och en sträng som inte börjar med ett nummer utvärderas som 0:

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

Naturligtvis, när vi försöker jämföra en sträng med en annan sträng finns det ingen konvertering:

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

men vi kan tvinga fram en omvandling med till exempel en + operator:

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

sista frågan returnerar TRUE eftersom vi summerar en sträng '0string' med ett nummer 0, så strängen måste konverteras till ett tal, den blir SELECT 0 + 0 = 'string' och sedan omvandlas strängen 'sträng' till ett tal innan den jämförs med 0, och den blir sedan SELECT 0 = 0 vilket är SANT.

Detta kommer också att fungera:

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

och kommer att returnera summan av strängarna omvandlade till tal (1 + 2 i detta fall).



  1. APPEND_ONLY_STORAGE_INSERT_POINT-spärren

  2. Hur ger man en unik begränsning till en kombination av kolumner i Oracle?

  3. SQL UPPDATERING

  4. PostgreSQL-handledning för nybörjare – Allt du behöver veta om PostgreSQL