2016-04-20 2 views
1

Я пишу Между запроса с отформатированной датой .. Это мой запрос:MySQL: между не работает с датой


ВЫБРАТЬ shop_id, date_format (registered_time, '% d-% m- % Y '), как дата, с магазинов, где (DATE_FORMAT (registered_time,' % d-% m-% Y ') между '09 -03-2016' и '19 -04-2016')


Однако , когда я выполняю запрос, он дает мне только записи между датой 09 и 19 независимо от месяца. Например, у меня есть записи, такие как 30-03-2016, 31-03-2016 .. но они игнорируются.

Если кто-то может найти что-нибудь из этого, пожалуйста, скажите мне ..

Еще одна вещь, я уверен, преобразование этой даты от времени поля штампа. Надеюсь, это не вызовет никаких проблем.

+1

Вы сравниваете строки, не относящиеся к дате. И '30 .. '** не ** между '09 ..' и '19 .. '. –

+0

Я использую тот же формат для сравнения результатов, в этом нет никаких проблем. Какие даты у вас есть в столбце таблицы – shzyincu

ответ

2

Вы не можете взять две произвольные строки (например,) и ожидать BETWEEN вести себя, как это было бы для реальных DATE колонн (поведение, которое жестко закодированы в MySql).

Для правильной работы необходимо использовать реальные значения DATE для BETWEEN.

  • Если столбцы уже DATE столбцы, просто пропустите форматирование:

    SELECT shop_id, registered_time FROM shops where registered_time 
    BETWEEN '2016-03-09' AND '2016-04-19' 
    

Если существующие столбцы в формате DD-MM-YYYY, преобразовывать их в даты, используя STR_TO_DATE() - либо на летать только для целей этого запроса (sloooowwwww!) или навсегда.

0

Вам нужно вернуть свои строки в даты, которые понимает MySQL. Из документации:

CAST(datetime_col AS DATE) 

должен помочь выполнить то, что вы хотите.

Reference

+1

'CAST()' вряд ли поймут формат «DD-MM-YYYY». –

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