$query = "SELECT * FROM mprice where price BETWEEN '1,000' AND '3,250' ORDER BY CAST(
REPLACE(price,',', '.') AS decimal(10,2)) LIMIT $from, $max_results"
此查询显示的结果如下
1,000
2,000
3,250
10,900
11,700
27,600
我想要这样
1,000
2,000
3,250
only
我该怎么做?请帮我解决这个问题。
由于
答案 0 :(得分:1)
这有点奇怪的功能。我建议您重新访问您的架构设计,如果您有选择这样做,并在价格列中使用数字类型(您可以在另一列中包含本地化信息)。也就是说,可以使用以下查询使其工作:
SELECT
*
FROM
mprice
WHERE
CAST(REPLACE(price, ',', '.') AS decimal(10,2)) BETWEEN 1.00 AND 3.25
ORDER BY
CAST(REPLACE(price, ',', '.') AS decimal(10,2))
请注意,在您的代码中,您尝试将price
限制为'1,000'
和'3,250'
之间的值。但是,字符串比较并不适用于数字类型,因为它按字典顺序(按字母顺序)排序,处理数字就像任何其他字符一样。在这种情况下,它包含10,900
和27,600
等值,因为这些字符串的第一个数字位于1
和3
之间,这是'1,000'
的第一个字符。 1}}和'3,250'
。
将价格转换为数字时,可以更正此行为。但是,您还需要将过滤值转换为数字,在本例中为1.00
和3.25
。