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

ý nghĩa của select '' - ''

Bạn đang trừ - từ một chuỗi trống '' sang khác:

Xem sau:

mysql> select '';
+--+
|  |
+--+
|  |
+--+
1 row in set (0.00 sec)  

mysql> select '3'-'2';
+---------+
| '3'-'2' |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)

Nhưng cảnh báo nếu nó không phải là chuỗi số :

mysql> select 'a'-'b';
+---------+
| 'a'-'b' |
+---------+
|       0 |
+---------+
1 row in set, 2 warnings (0.00 sec)    

Hai cảnh báo:

mysql> SHOW WARNINGS LIMIT 2
    -> ;
+---------+------+---------------------------------------+
| Level   | Code | Message                               |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'b' |
+---------+------+---------------------------------------+
2 rows in set (0.00 sec)  

Tại sao không có cảnh báo cho empty chuỗi?

Trường hợp không có cảnh báo cho chuỗi trống vì nó (được đúc một cái gì đó) 0 xem bên dưới:

mysql> SELECT 0 = '';
+--------+
| 0 = '' |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)   

do đó bằng cách thực hiện ''-'' bạn đang làm 0 - 0

mysql> SELECT '' - '';
+---------+
| '' - '' |
+---------+
|       0 |
+---------+
1 row in set (0.00 sec)  

Để rõ ràng hơn, tôi đang thêm ví dụ sau ( Tôi cảm thấy sẽ hữu ích cho bạn ):
Cách chuyển đổi xảy ra:

mysql> SELECT '0' = 0
    -> ;
+---------+
| '0' = 0 |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)  

nhận thấy sự chuyển đổi của nó:

mysql> SELECT '' = '0'
    -> ;
+----------+
| '' = '0' |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)  

'' được chuyển đổi thành 0 , '0' được chuyển đổi thành 0 nhưng '' không bằng '0'

mysql> SELECT '1' = 1
    -> ;
+---------+
| '1' = 1 |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)

mysql> SELECT '' = 1
    -> ;
+--------+
| '' = 1 |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec) 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khi nào tôi gọi bind_param nếu sử dụng các câu lệnh được chuẩn bị sẵn trong MySQLi trong một vòng lặp?

  2. thêm 30 phút vào datetime php / mysql

  3. Chuyển đổi truy vấn lớn

  4. Cập nhật MySQL phiên bản đầu tiên của một bản ghi

  5. php password_verify không hoạt động với cơ sở dữ liệu