【MySQL】文字列=0を比較した検索結果について
ここではMySQLで、文字列=0を比較した検索結果について紹介しています。
文字列=0を比較した検索結果について
文字列=0を比較した検索結果は全てのデータが返ってくることがあります。
次のSQLの例では、「emp_name = 0」という条件がありますが、全6件、全てのレコードが返ってきました。
文字列=0の条件があると、文字列を数値型に変換した値と比較を行います。数値型に変換でいない文字列は0になり、このような結果になります。
mysql> SELECT * FROM tab1 WHERE emp_name = 0;
+--------+-----------+-------+------+
| emp_id | emp_name | dept | age |
+--------+-----------+-------+------+
| 00001 | Suzuki | HR | 28 |
| 00002 | Tanaka | SALES | 25 |
| 00003 | Kizaki | SALES | 35 |
| 00004 | Takahashi | DEV | 45 |
| 00005 | Yoshida | DEV | 55 |
| 00006 | Nakata | DEV | 35 |
+--------+-----------+-------+------+
6 rows in set, 6 warnings (0.02 sec)
実際にemp_nameの値をCASTを使って数値型に変換すると0になりました。
mysql> SELECT emp_name,cast(emp_name AS SIGNED) FROM tab1 WHERE emp_name = 0;
+-----------+--------------------------+
| emp_name | cast(emp_name AS SIGNED) |
+-----------+--------------------------+
| Suzuki | 0 |
| Tanaka | 0 |
| Kizaki | 0 |
| Takahashi | 0 |
| Yoshida | 0 |
| Nakata | 0 |
+-----------+--------------------------+
6 rows in set, 12 warnings (0.00 sec)
次のように、数値型に変換しても、0とならないケースもあるので注意が必要です。
mysql> SELECT cast('100' AS SIGNED);
+-----------------------+
| cast('100' AS SIGNED) |
+-----------------------+
| 100 |
+-----------------------+
1 row in set (0.00 sec)