1.问题描述:
在维护代码时,发现使用MAX()函数,比较出来的结果不正确,查看后发现字段类型是varchar
2.问题解决:
MAX()和MIN()函数比较数字类型时,比较的是值,取出最大值或最小值
使用MAX()查询一个字符串类型的字段时,那么比较的实际是字符的ASCII码,然后依次往后比较
3.解决方案:
- MAX(total_score + 0)
- MAX(CAST(total_score as decimal(4,2))) as highScore 将字符串转换为decimal
补充说明:
对字符型数据的最大值,是按照首字母由A~Z的顺序排列,越往后,其值越大。当然,对于汉字则是按照其全拼拼音排列的,若首字符相同,则比较下一个字符,以此类推。
当然,对与日期时间类型的数据也可以求其最大/最小值,其大小排列就是日期时间的早晚,越早认为其值越小