【问题标题】:How to classify timestamp?如何对时间戳进行分类?
【发布时间】:2016-01-06 14:14:01
【问题描述】:

这是我的桌子:

+----+-----------------+
| id |    timestamp    |
+----+-----------------+
| 1  | 1452001861      |    -- yesterday
| 2  | 1452088272      |    -- today
| 3  | 1452088283      |    -- today
| 4  | 1451915461      |    -- last week
| 5  | 1452001861      |    -- yesterday
| 6  | 1452088263      |    -- today
| 7  | 1252388263      |    -- out of {today, yesterday, last week}
| 8  | 1452088312      |    -- today
| 9  | 1452001762      |    -- yesterday
| 10 | 1222388263      |    -- out of {today, yesterday, last week}
| 12 | 1451915459      |    -- last week
+----+-----------------+

现在我想这样选择:

+----+-----------------+---------------+
| id |    timestamp    |     range     |
+----+-----------------+---------------+
| 1  | 1452001861      |  yesterday    |
| 2  | 1452088272      |  today        |
| 3  | 1452088283      |  today        |
| 4  | 1451915461      |  last week    |
| 5  | 1452001861      |  yesterday    |
| 6  | 1452088263      |  today        |
| 7  | 1252388263      |  out          |
| 8  | 1452088312      |  today        |
| 9  | 1452001762      |  yesterday    |
| 10 | 1222388263      |  out          |
| 12 | 1451915459      |  last week    |
+----+-----------------+---------------+
//                             ^ this column isn't a real column

好吧,我能做的就是选择今天:

SELECT
  id,
  date_time
FROM
  viewed
WHERE
DATE_FORMAT(FROM_UNIXTIME(`date_time`), '%Y-%m-%d') >= (DATE_FORMAT(NOW(), '%y-%m-%d') - INTERVAL 1 DAY)

正如我所说,这个查询 ^ 只选择今天的时间戳。


我的问题:现在我想知道,如何将我的查询扩展到{今天​​、昨天 - 上周}?

【问题讨论】:

  • 我认为 MySQL 中没有“今天”、“昨天”、“上周”的内置分类。您所能做的就是计算从今天开始的天数(类似于DATEDiFF(CURDATE(), timestamp) AS daysSinceToday),然后让您的PHP 脚本对其进行分类(if($daysSinceToday == 0) //today// elseif ($daysSinceToday == 1) //yesterday// elseif ($daysSinceToday > 7) //Last 7 days//)。当您想像在 SO 上那样打印它们时,您还必须先让它们由 MySQL 订购。

标签: mysql datetime timestamp


【解决方案1】:

一个不完整的答案让你开始......

SELECT CASE DATE(FROM_UNIXTIME(1452001861)) 
       WHEN CURDATE() - INTERVAL 1 DAY THEN 'yesterday'
       WHEN CURDATE() THEN 'today' END x;

【讨论】:

  • DATE 转换数字,我认为,作为对问题陈述的一个很好的改进,它可以防止重新发明一些棘手的手动日期和时间计算。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2019-03-27
  • 2011-01-31
  • 2014-05-30
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
相关资源
最近更新 更多