按最近日期/小时之前或之后的mysql顺序

时间:2012-09-06 13:56:49

标签: mysql date

我有一个mysql表,其中有一个存储日期但不是日期格式的列,它是一个varchar。

该列名为data_hora,日期格式为dd/mm/yy,例如:06/09/2012 15:00,因此我必须在mysql查询中转换为日期格式。

我需要在当前时间之前或之后得到最接近的日期和时间,我想出了以下代码,但由于某种原因它似乎只得到最接近的日期而不是小时,很奇怪?!?!

SELECT str_to_date(data_hora, '%d/%m/%Y %H:%i') AS data_hora 
FROM requisicoes 
ORDER BY abs(DATE_FORMAT(NOW(),'%d/%m/%Y %H:%i') - data_hora) LIMIT 1

帮助:(

2 个答案:

答案 0 :(得分:4)

试试这个:

您的ORDER BY条款必须更改

SELECT str_to_date(data_hora, '%d/%m/%Y %H:%i') AS data_hora 
FROM requisicoes 
ORDER BY abs(TIMEDIFF( NOW() , str_to_date(data_hora, '%d/%m/%Y %H:%i'))) LIMIT 1

答案 1 :(得分:1)

您不应将NOW()格式化为字符串:它已经是TIMESTAMP值;相反,对于所选data_hora列,请将当前UNIX_TIMESTAMP()STR_TO_DATE()别名之间的(绝对)差异:

ORDER BY ABS(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(data_hora))

如果可能的话,我建议您更改架构,以便将data_hora列存储为TIMESTAMP:这将极大地提高此类查询的效果。