怎么让 mysql 将中文数字排序?

2023-07-13 17:45:38 +08:00
 gosky
比如有下面几行:




要求返回:




utf8mb4_unicode_ci 已经试过了,不符合需求
1356 次点击
所在节点    问与答
11 条回复
28Sv0ngQfIE7Yloe
2023-07-13 17:47:55 +08:00
数量不大的话 case when
LeegoYih
2023-07-13 17:49:58 +08:00
1.加一列阿拉伯数字
2.维护一个中文和阿拉伯数字映射表,join order
BiChengfei
2023-07-13 18:07:49 +08:00
自定义排序
ORDER BY FIELD(field ,str1 ,str2 ,str3 ,str4……) DESC
tool2d
2023-07-13 18:13:17 +08:00
写个函数把一二三替换成全角的123,这个在二进制编码上市连续的,就可以直接排序。
SpMozzi
2023-07-13 18:25:12 +08:00
select crc32(字段),字段 from t order by 1
SpMozzi
2023-07-13 18:25:50 +08:00
select * from a;
+--------+
| number |
+--------+
| 三 |
| 一 |
| 二 |
+--------+
select crc32(number),number from a order by 1;
+---------------+--------+
| crc32(number) | number |
+---------------+--------+
| 2416838398 | 一 |
| 2878220375 | 二 |
| 3922902618 | 三 |
+---------------+--------+
hsfzxjy
2023-07-13 18:32:05 +08:00
@SpMozzi crc32 这个什么原理啊?
SpMozzi
2023-07-13 18:37:01 +08:00
@hsfzxjy crc32 主要是对数据库的数据做简单校验,可以快速校验数据
pkoukk
2023-07-13 18:38:56 +08:00
有 一万三千八百 这样的数么?
有的话建议你再搞一列存阿拉伯数字吧
adoal
2023-07-13 18:41:50 +08:00
#9 问的是关键。只是一位中文数字,还是中文数,做法完全不一样的。
hsfzxjy
2023-07-13 19:51:11 +08:00
@SpMozzi 那 crc 的结果为什么就是汉字数字的序呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/956537

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX