要知道 sql 对于 varchar 的排序是字符序,它会从字符串的第一位开始进行 ascii 码的比较。 所以 30M < 40M,而301M < 40M。 如果你的单位是固定位数的话,可以用 mysql 的截取字符串函数,把单位去掉之后再进行过滤筛选。 如 select * from table where cast(substring_index(size,’M’,1) as signed) > 40 这个 sql 的意思是取这一列第一个 M 之前的字符并转化为整数,并且转化后的整数大于40。 当然这样写,列名用了函数就没法走索引了,数据量大的话会比较慢。 以上。
要知道 sql 对于 varchar 的排序是字符序,它会从字符串的第一位开始进行 ascii 码的比较。
所以 30M < 40M,而301M < 40M。
如果你的单位是固定位数的话,可以用 mysql 的截取字符串函数,把单位去掉之后再进行过滤筛选。
如 select * from table where cast(substring_index(size,’M’,1) as signed) > 40
这个 sql 的意思是取这一列第一个 M 之前的字符并转化为整数,并且转化后的整数大于40。
当然这样写,列名用了函数就没法走索引了,数据量大的话会比较慢。
以上。