2014-02-04 3 views
0

У меня есть запрос MySQL, который читает:Дата Сравнение внерабочее время (Даты строки) - MySQL

select sum(AmtPd) as HCSA from HC062017 where CostCenter = '8718' and ServiceDate > '08/31/2013' 

использовали его в течение нескольких месяцев без проблем. Сегодня я столкнулся с проблемой, когда она не работает. ServiceDate - это var (10), содержащий дату, выведенную из отчета. Формат - mm-dd-yyyy. То, что, как представляется, происходит, если ServiceDate находится в 2013 году (некоторые из них по-прежнему есть), то это утверждение отлично работает. Однако, когда ServiceDate находится в 2014 году, записи не выбираются. Если я опустил параметр ServiceDate, я получу желаемые результаты (так как все записи на этот раз пройдут 31 августа 2013 года). Может быть, мне повезло с месяцами «09», «10» и т. Д., Падая после «08». Я пробовал использовать str_to_date без везения

select sum(AmtPd) as HCSA from HC062017 where CostCenter = '8718' and str_to_date(ServiceDate, '%m, %d, %Y') > '08-31-2013';. 

Любые предложения по тому, как с этим справиться?

ответ

2

Вы должны преобразовать как в общий формат:

str_to_date(ServiceDate, '%m-%d-%Y') > str_to_date('08-31-2013', '%m-%d-%Y') 

Сравнение строк, как вы делали это плохая идея. Строки сравниваются в алфавитном порядке, поэтому '08 -31-2013 '«меньше», чем «09-30-2010 », потому что 9 сравнивается с 8 перед всем остальным. Вы можете сравнивать даты в формате ISO YYYY-MM-DD.

+0

Это сработало отлично. – user3042803

+0

Ну, не совсем. Данные не собираются правильно. Невозможно подтвердить даты, используемые в сравнении. Думал, что у нас это было. – user3042803

+0

Окончательный ответ. Заявление работает. Теперь просто нужно найти, что другая ошибка. – user3042803

1

STR_TO_DATE производит дату в формате ГГГГ-ММ-ДД. Таким образом, ваша дата, которую вы сравниваете, должна быть в том же формате:

str_to_date(ServiceDate, '%m, %d, %Y') > '2013-08-31'; 
Смежные вопросы