我有一個mysql表,它有一個存儲日期但不是日期格式的列,它是一個varchar。mysql在最近日期/小時之前或之後的順序
該列被稱爲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
幫助:(
不要忘記在where子句來提高性能時間條件:'這裏DATE_ADD(NOW之間data_hora() INTERVAL -1 HOUR)和DATE_ADD(NOW(),INTERVAL 1 HOUR)' – danihp
@danihp:全表掃描和每個字符串到時間戳的轉換仍然是必需的。排序和限制將同樣有效;在這種情況下,執行過濾器實際上只會增加額外的開銷。 – eggyal
@eggyal,當然!我認爲data_hora是一個時間領域......但不是! – danihp