1

私の声明は次のとおりです。

SELECT * FROM users WHERE division >= '0' AND division <= '10' AND voice = '0' ORDER BY username DESC LIMIT 0, 10 

ただし、これは部門が 2 に等しいユーザーを選択しません。

SELECT * FROM users WHERE division >= '1' AND division <= '9' AND voice = '0' ORDER BY username DESC LIMIT 0, 10 

ユーザーを選択します

どうしてこれなの?助けてくれてありがとう。

4

2 に答える 2

3

division文字列として保存しているようです。変換を行って数値と比較してみることができます。

SELECT *
FROM users
WHERE division+0 between 0 and 10 AND voice = '0'
ORDER BY username DESC
LIMIT 0, 10 ;

このアプローチの唯一の問題は、数値以外の値 (たとえば'A11') も一致することです。これは、MySQL がそのような値を追加で「0」として扱うためです。

ちなみに、文字列との整数比較は機能しますが、使用はお勧めしません。次のことを考慮してください。

select  (2 <= '10') as IntToString, ('2' <= '10') as StringToString

戻り値:

1    0
于 2013-08-29T23:21:05.147 に答える
0

除算が数値の場合は、

SELECT * FROM users WHERE division >= 0 AND division <= 10 AND voice = '0' ORDER BY username DESC LIMIT 0, 10 

それ以外の場合は、最初にキャスト関数を使用して除算を数値に変換します。

于 2013-08-29T23:17:55.317 に答える