where '1-1' in (1) |true
where '1-1' in ('1') |false
where '2-1' in (1) |false
uj5u.com熱心網友回復:
select '1-1'=1結果是true,原因是因為資料庫把varchar轉換成了int,把1-1轉換成了1uj5u.com熱心網友回復:
以下的內容,你要是都能理解,你的問題就有答案了。1、IN后邊的內容,如果是數字,那么會將IN前的字符內容(帶引號的),轉換成數字。
2、在字符轉換成數字的時候,從最左邊,逐一轉換,遇到非數字,就直接回傳。
假如 'ab',a是一個數字長度大于等于1,b是一個非數字的字符。那么'ab'轉換數字的結果,就是a。
可以試試以下的內容
SELECT CAST('5-5' AS SIGNED),'5-1'+0
總結,MYSQL,字符即使都是數字,也要加引號。
避免以下情況出現
SELECT 0 FROM DUAL WHERE '1A' = 1
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
不管前后都是一樣的結果,之前查到了一個合理解釋就是字串被轉換成強型別。轉換規則是前面從第一位開始到最后一位連續數字,感覺應該沒毛病,把int型別的轉成char就行了
uj5u.com熱心網友回復:
mysql> select '1-1';+-----+
| 1-1 |
+-----+
| 1-1 |
+-----+
1 row in set (0.00 sec)
mysql> select '1-1'-1;
+---------+
| '1-1'-1 |
+---------+
| 0 |
+---------+
1 row in set, 1 warning (0.00 sec)
mysql> select '5-1'-1;
+---------+
| '5-1'-1 |
+---------+
| 4 |
+---------+
1 row in set, 1 warning (0.00 sec)
mysql> select '1-5'-1;
+---------+
| '1-5'-1 |
+---------+
| 0 |
+---------+
1 row in set, 1 warning (0.00 sec)
綜上所述:
1.如果單獨輸出則表示是一個字串
2.如果作為算術運算則直接操作
3.如果帶有特殊符號則直接從左運算
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/23226.html
標籤:MySQL
上一篇:mysql前后字符之間截取替換
