2011-09-22 79 views
1

因此,我有一个应该存储产品价格的varchar列(不要问我该如何结束,但现在我无法更改此选项...叹气),它也可以是空白的,或者包含其中一个文字(字面上)“null”,“OUT”,其中两个都代表0的价格。找到MIN和MAX的最好和最有效的方法是什么这一栏的价值?用于在varchar字段中选择最小/最大值的Mysql查询

PS:我打开php/mysql混合解决方案,因为我需要最优化和有效的方式。这张桌子真的很大......

+0

我想我会添加一个数字列和触发器来计算。如果你经常访问数字,最好转换一次,为了响应时间 – Martin

回答

3

像这样的东西应该工作,并且合理高效。不过,这不会很快。

SELECT 
    MIN(CAST(price AS DECIMAL(8,2))) as price_min, 
    MAX(CAST(price AS DECIMAL(8,2))) as price_max 
FROM products 
WHERE price NOT IN('', 'null', 'OUT') 

测试之后,我注意到,显然铸造是自动完成的,所以你可以这样做:

SELECT 
    MIN(price) as price_min, 
    MAX(price) as price_max 
FROM products 
WHERE price NOT IN('', 'null', 'OUT') 
+2

在我的情况下,铸件不会自动发生,它必须明确设置,否则结果如下所示:99429> 10000032 –