如何从 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)
恕我直言,如果您想使用顺序或过滤条件而不是 order by
crontab 列,我会创建一个列来存储可以创建索引并提高性能的值。
我有一个存储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)
恕我直言,如果您想使用顺序或过滤条件而不是 order by
crontab 列,我会创建一个列来存储可以创建索引并提高性能的值。