-1

我有一个 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

帮助 :(

4

2 回答 2

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
于 2012-09-06T14:07:18.317 回答
1

您不应该格式化NOW()为字符串:它已经是一个TIMESTAMP值;取而代之的是,取所选列的当前UNIX_TIMESTAMP()值与data_hora别名之间的(绝对)差异:STR_TO_DATE()

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

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

于 2012-09-06T14:00:55.450 回答