gpt4 book ai didi

mysql - 将日期分类为 "yesterday"、 "last week"等

转载 作者:可可西里 更新时间:2023-11-01 07:05:05 26 4
gpt4 key购买 nike

我有一个这样的表:

// mytable
+----+------------+
| id | date_time |
+----+------------+
| 1 | 1464136759 | -- 5 days ago
| 2 | 1464436759 | -- 2 days ago
| 3 | 1464538248 | -- 6 hours ago
+----+------------+
-- ^ these are based on current time which is 1464561158

我也有这个问题:

SELECT id, CASE DATE(FROM_UNIXTIME(date_time))
WHEN CURDATE() THEN 'today'
WHEN CURDATE() - INTERVAL 1 DAY THEN 'yesterday'
WHEN CURDATE() - INTERVAL 7 DAY THEN 'in last week'
ELSE 'in last month or more'
END range
FROM mytable
WHERE 1

这是当前输出:

+----+---------------+
| id | range |
+----+---------------+
| 1 | in last month |
| 2 | in last month |
| 3 | yesterday |
+----+---------------+

如您所见,我的问题选择了所有错误的 unix 时间。为什么以及如何修复它?

这是预期输出:

+----+--------------+
| id | range |
+----+--------------+
| 1 | in last week |
| 2 | yesterday |
| 3 | today |
+----+--------------+

最佳答案

想必,你想要的逻辑是这样的:

SELECT id,
(CASE WHEN FROM_UNIXTIME(date_time) >= CURDATE() THEN 'today'
WHEN FROM_UNIXTIME(date_time) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN 'yesteray'
WHEN FROM_UNIXTIME(date_time) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN 'in last week'
ELSE 'in last month or more'
END) as `range`
FROM mytable
WHERE 1;

注意事项:

  • 没有理由提取日期。
  • case 语句中的子句按顺序执行,因此第一个匹配的子句将返回一个值。
  • 如果您的原始代码失败,那么这也可能失败。您的原始代码不应该只在“昨天”返回。
  • range是保留字,需要转义。

Here是 SQL fiddle 。

关于mysql - 将日期分类为 "yesterday"、 "last week"等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37515299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com