【发布时间】:2012-06-03 15:35:39
【问题描述】:
我有一张表,其中的值是
Table_hello
date col2
2012-01-31 23:01:01 a
2012-06-2 12:01:01 b
2012-06-3 20:01:01 c
现在我要选择日期
- 如果早于 3 天或更短时间,则以天为单位
- 如果是 24 小时之前或更短时间,则以小时为单位
- 如果是 60 分钟或更短时间,则以分钟为单位
- 如果是 60 秒或更短时间,则以秒为单位
- 在 3 天或更长时间之前采用简单格式
输出
for row1 2012-01-31 23:01:01
for row2 1 day ago
for row3 1 hour ago
更新 我的sql查询
select case
when TIMESTAMPDIFF(SECOND, `date`,current_timestamp) <= 60
then concat(TIMESTAMPDIFF(SECOND, `date`,current_timestamp), ' seconds')
when TIMESTAMPDIFF(DAY, `date`,current_timestamp) <= 3
then concat(TIMESTAMPDIFF(DAY, `date`,current_timestamp), ' days')end
when TIMESTAMPDIFF(HOUR, `date`,current_timestamp) <= 60
then concat(TIMESTAMPDIFF(HOUR, `date`,current_timestamp), ' hours')
when TIMESTAMPDIFF(MINUTE, `date`,current_timestamp) <= 60
then concat(TIMESTAMPDIFF(MINUTE, `date`,current_timestamp), ' minutes')
from table_hello
唯一的问题是我无法在 sql 中使用 break 和 default,例如 c++ 中的 switch case
【问题讨论】:
-
您能提供一些示例输出吗?就像上面的示例一样,您是否希望它输出 75 天、24 分钟、10 秒作为行值?你的意思是“简单格式”
-
简单的格式是显示存储的日期
-
如果存储为 int 而不是 datetime,为什么这会很容易? Mysql 内置了获取时差的函数。另外,您是否考虑过在应用程序级别而不是在数据库中进行这种比较?