0

我有一个带有最小和最大字段的搜索表单。它查询一个 MySQL 表。

“标价”字段是 varchar,包含带逗号的值,例如 200,000 或 34,150。

我无法检索正确的记录...

( List PriceBETWEEN '100000' AND '101000' ) 我得到的记录是 101900 - 高于最大值。

( List PriceBETWEEN '100,000' AND '101,000' ) 我得到 >= min 和 <= max 的记录

( List Price<= '101,000' ) 我得到的记录类似于 100,000 但也有 1,280,000 和 1,300,000

( List Price>= '300,000' ) 我得到的记录像 399,900 但也有 70,000

是不是因为字段值是char而不是int?逗号可以从mysql select中的字段中删除吗?(List Price>= '300,000' <- 以某种方式从数字中删除逗号,因此选择将显示为 'List Price' >= 300000 )

谢谢...

4

4 回答 4

1

您应该将字符串转换为整数。没有其他办法。

CAST(`list price` AS SIGNED) BETWEEN 100000 AND 101000
于 2012-04-05T14:49:24.987 回答
1

您应该将该 varchar 字段转换为十进制类型,以便进行适当的数字比较。您可以通过去掉逗号并执行 CONVERT() 来强制它为数字式,例如

CAST(REPLACE(`List Price`, ',', '') AS DECIMAL) BETWEEN 100000 AND 101000
于 2012-04-05T14:50:28.160 回答
0

什么MySQL版本?列上有索引吗List price这个错误是否相关?

有关转换,请参阅手册

如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。

唯一明智的解决方案是更改您的架构(即更改列类型),否则cast在每个查询中使用 a ,这将相当慢。

于 2012-04-05T14:54:01.330 回答
0

您将所有内容都视为字符串。

不要将您的参数放在引号中,因为它们是数字,mySQL 会为您将字符串转换为数字。

于 2012-04-05T14:56:25.257 回答