Неверный результат при сравнении двух дат (строка)

У меня есть стол test в моей базе данных MySQL. Ниже описано, как оно создано.

CREATE TABLE `test` (
 `update_date` varchar(10) NOT NULL,
 `value` double NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Ниже приведены его данные.

Я запускаю запрос ниже, как описано в выбранном ответе здесь

SELECT SUM(`value`) FROM `test`
WHERE STR_TO_DATE(`update_date`, '%d-%m-%Y') BETWEEN '01-10-2014' AND '31-10-2014'

Это должно вернуть 1800, но вместо этого он вернулся NULL, Почему это так и как я могу получить правильный ответ?

Очень важно: я должен использовать String за Date потому что я должен сохранить дату в dd-mm-yyyy формат и MySQL Date не принимайте это.

1 ответ

Попробуй это:

 SELECT SUM(`value`) FROM `test`
 WHERE STR_TO_DATE(`update_date`, '%d-%m-%Y') 
 BETWEEN STR_TO_DATE('01-10-2014', '%d-%m-%Y') AND STR_TO_DATE('31-10-2014', '%d-%m-%Y')

или вы также можете сделать это:

SELECT SUM(`value`) FROM `test`
WHERE STR_TO_DATE(`update_date`, '%d-%m-%Y') 
BETWEEN '2014-10-01' AND '2014-10-31'  -- in Y-m-d

Оба запроса должны вернуть 1800.

Обратите внимание, что STR_TO_DATE() возвращает значение DATETIME, которое находится в Y-m-d формат.

Другие вопросы по тегам