Php Mysql';介于'之间;如果varchar字段的值大于9999,则条件不起作用
如果范围超过9999,则MySQLPhp Mysql';介于'之间;如果varchar字段的值大于9999,则条件不起作用,php,mysql,Php,Mysql,如果范围超过9999,则MySQLbetween不起作用 字段类型为varchar 如果范围低于9999,则其工作正常 查询如下: SELECT `restaurant_details`.* from restaurant_details Where `restaurant_details`.`value` BETWEEN '8001' AND '12000' 要想弄清楚什么是错的,可以问自己一个问题,“8001”和“12000”之间的字符串是什么?也就是说,哪个表达式大于“8”而小于“1”
between
不起作用
字段类型为varchar
如果范围低于9999,则其工作正常
查询如下:
SELECT `restaurant_details`.*
from restaurant_details
Where `restaurant_details`.`value` BETWEEN '8001' AND '12000'
要想弄清楚什么是错的,可以问自己一个问题,“8001”和“12000”之间的字符串是什么?也就是说,哪个表达式大于“8”而小于“1”
答案是没有大于
8
和小于1
的字符。如果数据中出现小数,您可能希望将字符串转换为整数或浮点。要找出错误,请自问一个问题,“8001”和“12000”之间的字符串是什么?也就是说,哪个表达式大于“8”而小于“1”
答案是没有大于
8
和小于1
的字符。如果数据中出现小数,您可能希望将字符串转换为整数或浮点。您可以将VARCHAR
转换为整数(无符号)
,以进行适当的比较:
SELECT `restaurant_details`.*
from restaurant_details
Where CAST(`restaurant_details`.`value` AS UNSIGNED) BETWEEN 8001 AND 12000
EDIT:忘了提及您还必须在数字(本例中为8001和12000)周围加引号,因此
MySQL
也将其解释为整数。您可以将VARCHAR
强制转换为整数(无符号)
,以进行适当的比较:
SELECT `restaurant_details`.*
from restaurant_details
Where CAST(`restaurant_details`.`value` AS UNSIGNED) BETWEEN 8001 AND 12000
EDIT:忘了提及您还必须删除数字周围的引号(本例中为8001和12000),因此MySQL
也将其解释为整数。您能显示您正在查询的列吗?varchar不是这样工作的。它按字母顺序排序,而不是数字SHOW CREATE TABLE restaurant\u details
请。您能显示要查询的列吗?varchar不是这样工作的。它按字母顺序排序,而不是数字SHOW CREATE TABLE restaurant\u details
please。如果我修改“8000”和“9999”这样的范围,值在数据库中可用并起作用。但是当我增加它时,没有得到任何结果,因为1小于8。这是一根绳子。@Krishna:没错。高达9999,可能存在匹配项。请注意,81000
也匹配!如果我修改诸如“8000”和“9999”之类的范围,则值在数据库中可用并起作用。但是当我增加它时,没有得到任何结果,因为1小于8。这是一根绳子。@Krishna:没错。高达9999,可能存在匹配项。请注意,81000
也匹配!