我有一个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
帮助:(
答案 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
:这将极大地提高此类查询的效果。