varchar列中的Mysql编号查询问题

varchar列中的Mysql编号查询问题,mysql,Mysql,我在talbe中有这个列,出于历史原因,它是一个字符串,但现在新的值是数字 我必须从一个数字间隔中找到最大值,但这些值是DB中的字符串:( 如果op_calcul是一个数字,那么它就是一个微不足道的sql: Select MAX(op_calcul) FROM nom_prod where op_calcul >=500 and op_calcul < 5000 从nom_prod中选择MAX(op_calcul),其中op_calcul>=500,op_calcul=500 和

我在talbe中有这个列,出于历史原因,它是一个字符串,但现在新的值是数字

我必须从一个数字间隔中找到最大值,但这些值是DB中的字符串:(

如果op_calcul是一个数字,那么它就是一个微不足道的sql:

Select MAX(op_calcul) FROM nom_prod where op_calcul  >=500 and op_calcul < 5000
从nom_prod中选择MAX(op_calcul),其中op_calcul>=500,op_calcul<5000
但让他们当瓦查尔会给我带来麻烦

尝试了不同的场景,但还没有找到解决方案

有什么提示吗

谢谢

应该这样做。您可能还需要转换WHERE子句


理想情况下,出于MAX和WHERE的性能考虑,您应该使用整数列。其中是否有非数字或超出范围的数据?如果没有,则更改列类型应该非常简单。

使用mysql cast将数据转换为所需的数据类型

但是请注意,它确实会影响查询性能。

SELECT MAX(CAST(`op_calcul`AS SIGNED))
SELECT MAX(CAST(`op_calcul` AS SIGNED))
FROM `nom_prod`
WHERE `op_calcul`  >= 500
AND `op_calcul` < 5000;
来自“nom_prod”` 式中,`op_calcul`>=500 和'op_calcul'<5000;
该列的历史数据为varchar,如“code 12ac”etcAh…在这种情况下,您知道这些行可能无法正确转换,对吗?任何格式不正确的整数都可能被转换为0。编辑:编辑真的有必要吗?似乎有点多余。是的,但在op_calcul>=500和op_calcul<5000的范围内,没有冲突数据…harcoded的东西,但是必须的与整数进行比较会产生隐式转换,尽管我认为这不会导致任何问题。主要是观点,但通常不应使用反勾号,除非保留字用作实体名称(不应该这样做)。它们会破坏SQL可移植性(尽管一开始几乎没有),并且没有任何优势。
SELECT MAX(CAST(`op_calcul` AS SIGNED))
FROM `nom_prod`
WHERE `op_calcul`  >= 500
AND `op_calcul` < 5000;