Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql:защо сравнението на "низ" с 0 дава истина?

MySQL автоматично прехвърля низ към число:

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

и низ, който не започва с число, се оценява като 0:

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

Разбира се, когато се опитаме да сравним низ с друг низ, няма преобразуване:

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

но можем да принудим преобразуване, използвайки например оператор +:

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

последната заявка връща TRUE, защото сумираме низ '0string' с число 0, така че низът трябва да бъде преобразуван в число, става SELECT 0 + 0 = 'string' и след това отново низът 'string' се преобразува в число, преди да бъде сравнен с 0, и след това става SELECT 0 = 0 което е ВЯРНО.

Това също ще работи:

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

и ще върне сумата от низовете, преобразувани в числа (1 + 2 в този случай).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INSERT с SELECT

  2. MySQL:не е в GROUP BY

  3. конфигурацията на mysql спира при стартиране на сървъра

  4. Как да активирате оператора за конкатенация на тръби в MySQL

  5. Как да изпълните съхранена процедура в MySQL Workbench