Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql:tại sao so sánh 'chuỗi' với 0 lại cho kết quả đúng?

MySQL tự động chuyển một chuỗi thành một số:

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

và một chuỗi không bắt đầu bằng số được đánh giá là 0:

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

Tất nhiên, khi chúng tôi cố gắng so sánh một chuỗi với một chuỗi khác, sẽ không có chuyển đổi:

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

nhưng chúng tôi có thể buộc chuyển đổi bằng cách sử dụng, ví dụ:+ toán tử:

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

truy vấn cuối cùng trả về TRUE bởi vì chúng tôi ar tổng một chuỗi '0string' với một số 0, do đó, chuỗi phải được chuyển đổi thành một số, nó sẽ trở thành SELECT 0 + 0 = 'string' và sau đó một lần nữa chuỗi 'string' được chuyển đổi thành một số trước khi được so sánh với 0, và sau đó nó trở thành SELECT 0 = 0 là ĐÚNG.

Điều này cũng sẽ hoạt động:

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

và sẽ trả về tổng của các chuỗi được chuyển đổi thành số (1 + 2 trong trường hợp này).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 10 câu hỏi phỏng vấn cơ sở dữ liệu MySQL cho người mới bắt đầu và người trung gian

  2. mysql sau khi chèn trình kích hoạt sẽ cập nhật cột của bảng khác

  3. Cách hoạt động của hàm LPAD () trong MySQL

  4. Ưu điểm của MySQLi so với MySQL

  5. Làm cách nào để tôi có thể lặp qua tất cả các hàng của bảng? (MySQL)