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

mysql:hvorfor at sammenligne en 'streng' med 0 giver sand?

MySQL kaster automatisk en streng til et tal:

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

og en streng, der ikke begynder med et tal, evalueres som 0:

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

Selvfølgelig, når vi prøver at sammenligne en streng med en anden streng, er der ingen konvertering:

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

men vi kan fremtvinge en konvertering ved at bruge for eksempel en + operator:

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

sidste forespørgsel returnerer TRUE, fordi vi summerer en streng '0string' med et tal 0, så strengen skal konverteres til et tal, den bliver SELECT 0 + 0 = 'string' og så igen konverteres strengen 'streng' til et tal før den sammenlignes med 0, og den bliver så SELECT 0 = 0 hvilket er SANDT.

Dette vil også virke:

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

og returnerer summen af ​​strengene konverteret til tal (1 + 2 i dette tilfælde).



  1. Sådan omdøbes databasen i SQL Server - SQL Server / TSQL Tutorial Del 26

  2. Flere databaser i docker og docker-compose

  3. Hvordan opretter man forbindelse til MySQL på Amazon EC2 fra Linux / Mac?

  4. Hvad er den bedste måde at undslippe ikke-formattegn i Oracles to_char?