如何从 crontab 中获取小时并在存储在 mysql 时按顺序排序?

How to get hour from crontab and sort by order when store in mysql?

我有一个存储crontab的字段,现在我想根据crontab时间对表格进行排序,如何写sql? 例如,crontab 字段是:

7 9 9 */1 * ?, 
0 9 8 */1 * ?,
0 9 19 */1 * ?;

我要的结果是

0 9 8 */1 * ?, 
7 9 9 */1 * ?,
0 9 19 */1 * ?;

现在我只能这样写sql:

select * from tb_student order by crontab  desc

因为Seconds对于crontab表达式不是强制的,可能会有一些特殊字符如下tables.

Field name Mandatory? Allowed values Special characters
Seconds No 0-59 * / , -
Minutes Yes 0-59 * / , -
Hours Yes 0-23 * / , -
Day of month Yes 1-31 * / , - L W
Month Yes 1-12 or JAN-DEC * / , -
Day of week Yes 0-6 or SUN-SAT * / , - L #
Year No 1970–2099 * / , -

如果我们确保小时为数字且格式相同。

0 9 19 */1 * ?

我们可以尝试使用SUBSTRING_INDEX来获取您期望的部分订单号。

SELECT *
FROM T
ORDER BY CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(Crontab, ' ', 3), ' ', -1) AS SIGNED)

sqlfiddle

恕我直言,如果您想使用顺序或过滤条件而不是 order by crontab 列,我会创建一个列来存储可以创建索引并提高性能的值。