如何对前缀中包含当前年份的数字进行排序
Posted
技术标签:
【中文标题】如何对前缀中包含当前年份的数字进行排序【英文标题】:How to sort numbers containing current year in prefix 【发布时间】:2021-08-12 13:33:32 【问题描述】:我在对项目中的工作编号进行排序时遇到问题。 我的客户要求是以以下格式存储工作编号:-
current year-1, current year-2, current year-3, and so on...
例如:- 今年是 2021 年,所以工作编号是这样的:-
21-1, 21-2, 21-3, 21-4, and so on...
当年份发生变化时,它应该从 1 重新开始,以此类推为下一年。 例如:-
22-1, 22-2, 22-3, 22-4, and so on...
我已成功存储上述格式的作业编号,但我无法按照客户的要求以正确的方式对作业编号进行排序。 我以这种方式对数据进行了排序:-
21-1, 21-10, 21-100 to 21-109, 21-11 to 21-19, 21-2 and so on...
但实际的排序应该是这样的:-
21-1, 21-2, 21-3, 21-4...21-10, 21-11 to 21-99, 21-100 to 21-199 and so on...
如果年份发生变化,那么:-
22-1, 22-2, 22-3, 22-4...22-10, 22-11 to 22-99, 22-100 to 22-199 and so on...
我希望我已经简要解释了我的问题。请帮我整理一下工号。
【问题讨论】:
请在更新后的问题中包含用于对这些数据进行排序的代码 使用 natcase 排序.. 【参考方案1】:我假设您需要在数据库中进行排序,因为您正在分页或只是没有将所有结果保存在应用程序内存中,请使用以下 sql order by
子句:
select my_column
from my_table
order by left(my_column, 2),
len(my_column),
right(my_column, len(my_column) - 2)
说明:
left(my_column, 2),
对前两位数字进行数字排序,以便将年份组合在一起。
len(my_column)
基于大小的组记录序列(即,xx-100
出现在 xx-2
之后,因为它更长)。
right(my_column, len(my_column) - 2)
对记录序列进行数字排序。
提示:这假设您的年份代码始终是两位数。我本可以找到破折号的索引,但这感觉更加推定。
如果您需要应用程序端 (php) 解决方案,您可以使用natsort。来自 W3Schools:
定义和用法
natsort() 函数通过使用 “自然顺序”算法。这些值保留其原始键。
在自然算法中,数字 2 小于数字 10。在 电脑排序,10小于2,因为“10”中的第一个数字 小于 2。
语法
natsort(数组)
【讨论】:
谢谢你,德文·伯克。你的回答对我来说很好。【参考方案2】:21-1, 21-10, 21-100, 1, 10, 100
这些是您在数据库中的 ID。首先,声明一个空数组和一个串行变量,然后循环遍历对象。用两个新的keys array["date_serial"]
、array["serial"]
推送每个对象。然后取出新数组,然后通过“序列”键或asc
或desc
顺序对数组进行排序来显示结果。
【讨论】:
以上是关于如何对前缀中包含当前年份的数字进行排序的主要内容,如果未能解决你的问题,请参考以下文章