条件付きステートメントで文字列が使用されている場合、mysql はどのように文字列をブール値にキャストしますか?
select if("192.168.0.0",true,false) // returns 1
select if("-1",true,false) // returns 1
select if("a1",true,false) // returns 0
MySQL は C スタイルのブール値を使用します。0
は false で、その他の数値は true です。したがって、本当の質問は次のとおりです。
MySQL はどのように文字列を数値にキャストしますか?
その答えは、明らかな方法で文字列を変換することです。左から右に移動し、有効な数値がなくなったときに解析を停止します。例えば:
mysql> select '192.168.0.0' + 0, '-1' + 0, 'pancakes11' + 0;
+-------------------+----------+------------------+
| '192.168.0.0' + 0 | '-1' + 0 | 'pancakes11' + 0 |
+-------------------+----------+------------------+
| 192.168 | -1 | 0 |
+-------------------+----------+------------------+
(10 進数) の一部にすることはできない'a1'
ため、数値またはブール値のコンテキストではゼロです。'a'
式の評価における型変換およびconvert
マニュアルのセクションが役立つ場合があります。
PS: 文字列に二重引用符を使用する習慣を身につけないでください。MySQL では使用できますが、多くのデータベースでは使用できません。一重引用符は、SQL で文字列リテラルを引用するために使用されます。