2016-07-21 8 views
0

日付はd/m/Yの形式で格納されているmysql、varcharカラムにあります。古い入力はm/Yのみと考えられます。MySQLはカスタムフォーマットの日付を現在と比較します

私は最も古いレコードを選択するクエリを持っている:

SELECT expire 
FROM logs 
WHERE log_id = :logid AND STR_TO_DATE(expire, '%d/%m/%Y') > NOW() 
ORDER BY STR_TO_DATE(expire, '%d/%m/%Y') ASC LIMIT 0,1" 

日は私が返すことができるか、データベース中の(M/Yなど)「D」せずに、古い形式で保存されている場合、これはしかし、何も返しませんdなしのANDとの行?

+0

第一「WHERE LOG_ID =ログから期限切れにSELECT:LOGID」を実行し、あなたの取得結果を –

答えて

2

あなたはSTRの長さを確認することができます

SELECT expire 
FROM logs 
WHERE log_id = :logid 
AND CASE length(expire) 
     WHEN 10 THEN STR_TO_DATE(expire, '%d/%m/%Y') > NOW() 
     WHEN 7 THEN STR_TO_DATE(expire, '%m/%Y) > NOW() 
     END 
ORDER BY STR_TO_DATE(expire, '%d/%m/%Y') ASC LIMIT 0,1; 
+0

これは、しかし、私は長さ10と7すなわちを使用し、トリックをしたと検証。 (01/1990)および1990年1月1日)。 – Diamonte

+0

ありがとう..私は正しい長さの答えを更新している.. – scaisEdge

関連する問題