1

誰でもここで私を助けてくれませんか。私が盲目的に明白なことを見逃していない限り、私は完全に困惑しています.

価格列で 6 以下のすべてを要求し、分列で 500 以上のすべてを要求している場合、このクエリはどのようにその行を返すのでしょうか。

  1. 分は varchar です
  2. 価格は整数です

価格は整数です

簡単に言うと、ここで何が起こっているのか

CREATE TABLE `gg_Crates` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `price` int(11) NOT NULL,
 `minutes` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
 `sms` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
 `data` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
 `url` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `bb` int(5) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
4

4 に答える 4

2

文字列を比較しているため、その行を取得しています。"500" >= "60"ASCII 文字の順序のため、真です。

minutesデータをフィルタリングするときに、列のタイプを変更するか、値を解析する必要があります。例えば。

SELECT *, CONVERT(minutes,UNSIGNED INTEGER) AS minutes_int
...
WHERE
...
AND `minutes_int` >= 600
...

文字列値を整数値と直接比較することもできます。

AND `minutes` >= 600

コンマを削除しますが、可能であれば、列の形式を変更することを検討することをお勧めしますvarchar(11).

于 2013-05-17T23:54:47.563 に答える
0

2 つの文字列を比較しており、数値比較の出力を期待しています。言い換えれば、やりたい500 >= 60のに実際に実行"500" >= "60"するとSTRCMP("500", "60")、同じ結果が得られないということです。

列を整数としてキャストし、代わりに数値を使用して比較を行います。

WHERE CONVERT(minutes, UNSIGNED INTEGER) >= 500

于 2013-05-17T23:57:45.780 に答える
-1

( )条件で括弧を使用してみてください。同様の問題が私にも起こりました。ANDブラケットが使用されていない場合、エンジンがオペレーターをキャプチャーしないことがあります。

于 2013-05-17T23:54:38.800 に答える