gpt4 book ai didi

MySQL:ORDER BY 使用长字符串产生错误的顺序

转载 作者:行者123 更新时间:2023-11-29 02:11:52 25 4
gpt4 key购买 nike

我有一个包含 VARCHAR(255) 列的表,其中包含以下字符串。

1
2
5
22
text

我需要规范化字符串并像这样对它们进行排序。我在它们前面加上 0,这样我在订购时会得到以下信息:

0001
0002
0005
0022
text

这里是查询:

SELECT right(concat('000000000000000000000000000000000000', test), 36)
FROM my_table
ORDER BY right(concat('000000000000000000000000000000000000', test), 36);

如果 right() 调用中的 number_of_chars 足够小(例如 16),则顺序正确,但如果我使用 36,则顺序不正确:字符串 5 出现在 2 之前。

000000000000000000000000000000000005
000000000000000000000000000000000002

问题:这种行为的原因是什么?这是一个错误吗?如何解决?

这是我的表格的样子:

mysql> describe my_table;
+----------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+--------------+------+-----+---------+-------+
| id | varchar(255) | NO | PRI | NULL | |
| test | varchar(255) | NO | UNI | NULL | |
+----------------------------+--------------+------+-----+---------+-------+

我正在使用 MySQL 5.7.15

最佳答案

似乎在 21 个字符之后,带有字符串填充的右子字符串不起作用..但是你可以简单地使用 LPAD这项工作也适用于 100 或更多

SELECT test
FROM my_table
ORDER BY lpad(test,100, '0')

关于MySQL:ORDER BY 使用长字符串产生错误的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50046787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com