在我的项目中,我很难分清工作编号。我的客户要求以以下格式存储职务编号:
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...我希望我已经简单地解释了我的问题。请帮我整理一下工作号码。
发布于 2021-08-12 14:44:08
我假设您需要在数据库中进行排序,因为您正在分页,或者只是不保存应用程序内存中的所有结果,请使用以下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)解决方案,可以使用纳蒂。来自W3Schools:
定义和用法 函数通过使用“自然顺序”算法对数组进行排序。这些值保留原来的键。 在自然算法中,数字2小于数字10。在计算机排序中,10小于2,因为"10“中的第一个数小于2。 语法 纳特排序(数组)
发布于 2021-08-12 14:38:09
21-1, 21-10, 21-100, 1, 10, 100 这些是数据库中的ids。首先,声明一个空数组和一个串行变量,然后循环遍历对象。使用两个新的keys array["date_serial"] ( array["serial"] )推送每个对象。然后接受新的数组,然后通过按“串行”键或asc或desc顺序排序数组来显示结果。
https://stackoverflow.com/questions/68758485
复制相似问题