我在talbe中有这个列,由于历史原因是一个字符串,但现在新的值是数字。
我必须从数字间隔中找到最大值,但值是DB中的字符串:(
如果op_calcul是一个数字,那将是一个简单的sql:
Select MAX(op_calcul) FROM nom_prod where op_calcul >=500 and op_calcul < 5000
但将它们作为varchar让我陷入困境。
尝试了不同的方案但尚未提供解决方案。
任何提示?
由于
答案 0 :(得分:1)
SELECT MAX(CAST(op_calcul as SIGNED)) FROM nom_prod...
应该做的伎俩。您可能还需要转换WHERE子句。
理想情况下,出于性能原因,MAX和WHERE都应该使用整数列。是否有非数字或超出范围的数据?如果没有,那么改变列类型应该是相当简单的。
答案 1 :(得分:1)
使用mysql强制转换将数据转换为必需的数据类型。
http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast
但请注意,它确实会影响查询性能。
答案 2 :(得分:1)
SELECT MAX(CAST(`op_calcul` AS SIGNED))
FROM `nom_prod`
WHERE `op_calcul` >= 500
AND `op_calcul` < 5000;