如何对前缀中包含当前年份的数字进行排序

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"] 推送每个对象。然后取出新数组,然后通过“序列”键或ascdesc顺序对数组进行排序来显示结果。

【讨论】:

以上是关于如何对前缀中包含当前年份的数字进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“在当前项目和插件组中找不到前缀'liquibase'的插件”

对列名排序后转置和添加前缀的宏

Laravel路线中包含文件夹名称

如何对对象中包含的列表进行排序

如何在数据框的值中添加前缀字符串

在 frontmatter 元数据中包含 fontawesome 品牌图标