sql 怎么对带单位字符串排序?

表中有个字段size带单位M, 假如有记录 50M 40M 20M,怎么写sql查询出所有大于30M的记录?

阅读 3k
1 个回答

要知道 sql 对于 varchar 的排序是字符序,它会从字符串的第一位开始进行 ascii 码的比较。

所以 30M < 40M,而301M < 40M。

如果你的单位是固定位数的话,可以用 mysql 的截取字符串函数,把单位去掉之后再进行过滤筛选。

如 select * from table where cast(substring_index(size,’M’,1) as signed) > 40

这个 sql 的意思是取这一列第一个 M 之前的字符并转化为整数,并且转化后的整数大于40。

当然这样写,列名用了函数就没法走索引了,数据量大的话会比较慢。

以上。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题