mysql有varchar2嗎,mysql倒敘varchar類型的數字_MySql遇到varchar字段數字字符串排序問題

 2023-10-13 阅读 25 评论 0

摘要:項目中遇到的問題,一個筆試試卷成績查詢最高分和最低分,簡單的對分數字段排序,一直是正常的。出bug了就這個簡單的功能,突然有一天,客戶發現很奇怪的是最高分比最低分還低。mysql有varchar2嗎?這明顯是有問題的:數據庫大概是這樣的

項目中遇到的問題,一個筆試試卷成績查詢最高分和最低分,簡單的對分數字段排序,一直是正常的。

出bug了

就這個簡單的功能,突然有一天,客戶發現很奇怪的是最高分比最低分還低。

mysql有varchar2嗎?這明顯是有問題的:

55a4b13d93da6a38076d2635c86d8cc2.png

數據庫大概是這樣的: id name score 1 小明 32

2 小紅 8

3 小王 40

MySQL substring。4 小武 16

直接排序:

SELECT * FROM `exam_score` ORDER BY score DESC;

輸出結果: id name score 2 小紅 8

sql字符串轉換為數字排序。3 小王 40

1 小明 32

4 小武 16

一個存儲成績的表的分數score字段原本為int類型被修改為varchar類型后,原本正常的最高分最低分輸出,變得不正確了。

MySQL decimal,原因

回溯找原因,原來這個score字段在當初是int字段,后來又一次小伙伴在筆試題庫里加入了0.5分值的題目,為了兼容這個情況,很粗暴的把成績字段也直接改為了varchar類型,而這個根據score字段排序的代碼沒有一起修改,那遇到這種情況,如何能正確的排序呢?

正確的使用varchar字段里的數字排序:

借助函數CONVERT(value as type),其中的type可選有如下幾種類型,按需使用: DECIMAL:浮點數

mysql 命令 添加字段,SIGNED:整數

UNSIGNED:無符號整數

由于這里score可能出現小數,所以應該選用DECIMAL。 SELECT * FROM `exam_score` ORDER BY CONVERT(score,DECIMAL) DESC;

將字段轉化為DECIMAL類型再排序,這樣就可以了。

mysql和oracle的區別,mysql存儲小數更好的辦法

這個問題其實是使用mysql存儲小數的問題,直接使用字符串執行效率會降低,推薦方案: 使用乘以10的倍數來存儲,比如價格以分(0.01元)為單位,乘以100后使用整數存儲,不會丟失精度,也不會出現類似的排序問題。

使用decimal類型的方式存儲。

將小數和整數部分分開存儲。

mysql 字段類型?參考

MySql遇到varchar字段數字字符串排序問題

更多精彩,敬請關注本博微信公眾號:hsu1943

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/135791.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息