php - 我想按 1 2 3 4 1 2 3 4 的顺序对我的 CatId 进行排序,但有一个问题,如果 catid 相同,它首先检查 allocationId 最后 14 位数字

标签 php mysql datetime

我的查询是这样的:-

SELECT m.allocationID,mt.CatId,mt.CatSName 
FROM msttransaction m,msttemp mt WHERE m.isPending='Y' 
AND m.allocationID IN ( 
    SELECT mt.AllocationId FROM msttemp WHERE mt.quarterId='010100001'
) ORDER BY SUBSTRING(m.AllocationId, -14)

输出:-

12980013120170919125006   1   A

12980013320170919125404   3   C

12980013420170919125603   4   D

12980013820170919130113   2   B

12980013920170919130315   3   C 

12980014020170919130519   4   D

12980013220170919130613   2   B

12980013720170919130722   1   A

129800 系列中,最后 14 位数字是日期和时间。首先,我必须根据 1 2 3 4 1 2 3 4 对我的输出进行排序,但首先它会检查同一 catId 的 129800 的最后 14 位数字,先到先到。

预期输出

12980013120170919125006 1 A 
12980013820170919130113 2 B
12980013320170919125404 3 C
12980013420170919125603 4 D 
12980013720170919130722 1 A 
12980013220170919130613 2 B 
12980013920170919130315 3 C 
12980014020170919130519 4 D

最佳答案

这样行吗?

  ORDER BY m.CatId, SUBSTRING(m.AllocationId, -14)

要点是首先按 CatId 排序,然后按 AllocationId 中嵌入的数据戳排序。

如果是我,我会更正式地处理日期戳顺序,通过从您的字符串中正式提取它 using STR_TO_DATE() like this .这不是绝对必要的,但无论如何都是很好的做法。

  ORDER BY m.CatId, STR_TO_DATE(SUBSTRING(m.AllocationId, -14), '%Y%m%d%H%i%s'))

另外,你可以像这样使用日期操作

  ORDER BY m.CatId, LAST_DAY(STR_TO_DATE(SUBSTRING(m.AllocationId, -14), '%Y%m%d%H%i%s')))

将一个月内的所有日期戳收集在一起用于订购,或类似的事情。

这是一个例子:http://sqlfiddle.com/#!9/1c87ee/6/0

关于php - 我想按 1 2 3 4 1 2 3 4 的顺序对我的 CatId 进行排序,但有一个问题,如果 catid 相同,它首先检查 allocationId 最后 14 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46363346/

相关文章:

mysql - 使用 Perl 更改日期格式

php - 时间戳更改而不修改数据库中的字段

php - Mysql 多重选择器

php - mysql读取表数据的字符串分隔符

php - 自定义文件上传按钮

mysql - 根据用户拥有的 "chances"数量分配行

php - 需要帮助构建 Eloquent 多对多关系(laravel 5.1)

mysql - SQL仅插入表,如何仅选择最新条目

java - 在获取 UTC Android 中的实际时间时遇到问题

mysql - 无法将 a 插入 MySQL 中的 DATETIME 列