作为服务器端使用php/mysql和客户端使用JS/jQuery的实时聊天脚本的一部分,我想以特殊格式输出每条消息的日期。
如果消息是今天这样发送的(例如):Today 22:30
,如果它是昨天发送的:Yesterday 12:30
如果它是在昨天之前发送的,它应该输出这个日期格式:dd.mm.yy H:i (for example 28.05.14 22:19)
.
当然我知道我可以很容易地用php做到这一点,但为了更好的性能,我想用SQL来做到这一点。
我在mysql文档中读了很多,但是尽管我发现了很多日期格式化,我找不到这样的东西。
现在我想知道这是否可能与SQL?
每条消息的日期在数据库中以TIMESTAMP形式存储。
使用下面的查询。它必须满足你的要求(有或没有一些修改)。
SELECT IF(DATE_FORMAT(`created`, '%Y-%m-%d') = DATE(NOW()),
'TODAY ' + DATE_FORMAT(`created`, '%k:%i'),
(SELECT IF(DATE_FORMAT(`created`, '%Y-%m-%d') < DATE(NOW()),
(SELECT IF(DATE_FORMAT(`created`, '%Y-%m-%d') = (DATE(NOW() - INTERVAL 1 DAY)),
'YESTERDAY ' + DATE_FORMAT(`created`, '%k:%i'),
DATE_FORMAT(`created`, '%d-%m-%y %k:%i'))),
'NO DISPLAY'
)
)
) FROM user;
注意:这里'created'是我打算从user表中获取的日期。
对于DATE_FORMAT ()函数描述和使用的参数检查此链接http://www.w3schools.com/sql/func_date_format.asp