2

ID が 1 ~ 100 の郵便番号があります。

次のクエリは、where 句の ID が存在しない場合でも、カウント 1 を返します。

SELECT COUNT(`id`) AS `Zipcode.count` 
FROM `Zipcode` 
WHERE `Zipcode`.`id` = "22a" LIMIT 1;

MySQLの舞台裏で「22a」が単に「22」になっているためだと思います。おそらく、MySQL がデータ型などを自動的に変換しているためでしょうか?

以下はゼロカウントを提供します (したがって、char "a" が int "22" の前または後ろにある場合に違いが生じます)。

SELECT COUNT(`id`) AS `Zipcode.count` 
FROM `Zipcode` 
WHERE `Zipcode`.`id` = "a22" LIMIT 1;

このクエリを文字列と照合したい。データ型が正しくない場合、文字を削除しないでください。これにより、望ましくない答えが誤って提供されます。どちらの場合も、結果はゼロになるはずです。

私に何ができる?

4

3 に答える 3

1

これを試して:

SELECT COUNT(`id`) AS `Zipcode.count`
FROM `Zipcode`
WHERE CAST(`Zipcode`.`id` AS CHAR) = "22a"

id のデータ型を CHARにキャストするため、「22a」を 22 に変換しません。

于 2013-03-26T09:37:49.740 に答える
0

これを試して

SELECT COUNT(`id`) AS `Zipcode.count` FROM `Zipcode` WHERE `Zipcode`.`id` = 22a LIMIT 1;
于 2013-03-26T09:40:45.637 に答える
0

これを試してみてください。LIMIT 句が 1 に設定されているため、最大結果は 1 つしか得られないことに注意してください。

SELECT COUNT(`id`) AS zipCodeCount 
FROM `Zipcode` 
WHERE `id` = "22a" 
LIMIT 1;
于 2013-03-26T10:06:54.687 に答える