MySQL 将 STRING 排序为 INT 并插入

发布于 2024-12-17 02:49:26 字数 332 浏览 2 评论 0原文

我有一个像这样的数据集:

print_id
--------
2b
1
2
4b
4a
3
6
2a
5

打印 ID 的格式可以是: /([0-9]+)([ae]{1})?/

我想要的是首先按数字和字母对它们进行排序如果有的话。如果没有字母,则它是该数字顺序中的第一个字母。所以结果应该是这样的:

print_id
--------
1
2
2a
2b
3
4a
4b
5
6

我尝试了 ORDER BY (print_id + 0) 它正确地对数字进行排序,但它并不能完全解决问题。有什么建议吗?

I have a dataset like so:

print_id
--------
2b
1
2
4b
4a
3
6
2a
5

The print ID can be in the format of: /([0-9]+)([a-e]{1})?/

What I want to is order them first by number, and by letter if there is any. If there is no letter, then it's the first in the order for that number. So the result should be like so:

print_id
--------
1
2
2a
2b
3
4a
4b
5
6

I tried ORDER BY (print_id + 0) it sorts the numbers correctly but it just doesn't quite do the trick. Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白鸥掠海 2024-12-24 02:49:26

ORDER BY 子句中可以有多个表达式:

ORDER BY print_id + 0, print_id

这将首先尝试按数字顺序对它们进行排序(丢弃字母后缀),如果它们在数字上相等,则会按它们的字符串值对它们进行排序(包括字母后缀)。对于您所描述的规则,唯一会违反的情况是您有前导零;例如,此 ORDER BY 子句会将 '01b' 排序在 '1a' 之上。您的数据中会发生这种情况吗?

You can have multiple expressions in the ORDER BY clause:

ORDER BY print_id + 0, print_id

This will first try to order them numerically (discarding the letter suffix), and if they are numerically equivalent, it will order them by their string values (including the letter suffix). For the rule that you described, the only time this will break is if you have leading zeroes; for example, this ORDER BY clause will sort '01b' above '1a'. Can that happen in your data?

枫林﹌晚霞¤ 2024-12-24 02:49:26
ORDER BY print_id

应该做你想做的事。它将按字符字段 print_id 排序,这相当于按单个字符排序。

所以,对于一张桌子

print_id
--------
1
3a
3c
2b
2c
2a
3b
0
0b
00

你会得到

print_id
--------
0
00
0b
1
2a
2b
2c
3a
3b
3c
ORDER BY print_id

should do what you want. It will order by the character field print_id, which is equivalent to ordering by individual characters.

So, for a table

print_id
--------
1
3a
3c
2b
2c
2a
3b
0
0b
00

You'll get

print_id
--------
0
00
0b
1
2a
2b
2c
3a
3b
3c
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文