【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)