2016-05-30 4 views
1

以下のクエリの条件が真の結果を返すが、私は偽の結果が欲しい。私に提案してください。mysqlの先行ゼロでvarcharをチェックする方法

select * 
from test  
where 
'00160001' between '0013001' and '0023000' OR 
'00200000' between '0013001' and '0023000' 
+0

値は数値になりますか? – Vatev

+0

私はあなたが実際にそれらの値に対してテーブルの列をテストしたいと思いますか?現時点では、テーブル内のすべての行が返されるか、まったくテーブルの既存の列をテストしないため、指定した定数にのみ依存します。テーブルのデータをチェックする場合は、列の定義を表示して、文字列か数値かを確認してください。 –

+0

すべてのリテラルを文字列として定義すると、すべての比較が文字列になります。 8文字の文字列は、いくつか余分な手がかりがない限り、7文字列の間にあることはできません。 –

答えて

0

先行ゼロなしで同じ結果が得られます。
整数データ型を使用して整数値を比較します。キャストと

http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html

あなたの例:
はまた、キャストを使用してその場で値を変換することができ、実際の数字を使用したり変換してからあなたを防ぐことは何

select if(cast('00160001' as unsigned) between cast('0013001' as unsigned) 
and cast('0023000' as unsigned),1,0) as test_a, 
if(cast('00200000' as unsigned) between cast('0013001' as unsigned) 
and cast('0023000' as unsigned),1,0) as test_b; 
関連する問題