2016-07-21 2 views
0

У меня есть в столбце mysql, varchar, где даты хранятся в формате d/m/Y, считая, что более старые входы - только 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" 

Это, однако, ничего не возвращается, если дата хранится в старом формате без «D» (как м/Y) в базе данных, как я могу вернуться строка с AND без d?

+0

первым выполнить «SELECT истекают из журналов WHERE log_id =: LOGID» и проверить ваши получать результаты –

ответ

2

Вы можете проверить длину ул

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) и 01/01/1990). – Diamonte

+0

Спасибо .. У меня есть ответ на нужную длину. – scaisEdge

Смежные вопросы