-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

これを試して:

ORDERBY句を変更する必要があります

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 に答える