Диапазон дат MYSQL RFC 2822

СИТУАЦИЯ Я извлекаю метки времени, отформатированные в RFC 2822 (сб, 01 декабря 2012 г., 05:49:45 +0000), и сохраняю их в поле VARCHAR в MYSQL. У меня есть start_date и end_date.

ЦЕЛЬ Поиск МЕЖДУ двумя датами (например, start_date МЕЖДУ «2012-11-01» И «2012-12-01»)

УСЛОВИЯ Я хочу сделать это с помощью чистого SQL, а не выполнять постобработку в PHP

ПРИЕМЛЕМЫЙ КОМПРОМИСС Я не хочу, но я буду преобразовывать и хранить их как DATETIME с помощью PHP, если это необходимо.

Может ли кто-нибудь помочь мне достичь моей цели (перечисленной выше). Рик


person Rick Scolaro    schedule 20.12.2012    source источник


Ответы (3)


Вы можете преобразовать свои строковые даты в дату и время, используя str_to_date:

select str_to_date('Sat, 01 Dec 2012 05:49:45 +0000','%a, %d %b %Y %T')

Если вам нужно также преобразовать часовой пояс, попробуйте следующее:

set @datestring='Sat, 01 Dec 2012 05:49:45 +0000';
select
  CONVERT_TZ(
    str_to_date(@datestring,'%a, %d %b %Y %T'),
    concat(mid(@datestring, 27, 3), ':', mid(@datestring, 30, 2)),
    '+00:00'
  )
person fthiella    schedule 20.12.2012
comment
На самом деле я был на этом маршруте, но я врезался в стену, когда добрался до часового пояса. Нет никакого способа разобрать это с помощью SQL. - person Rick Scolaro; 21.12.2012
comment
@RickS есть функция CONVERT_TZ, я думаю, вы можете заставить ее работать, я обновлю свой ответ - person fthiella; 21.12.2012

Сохраните их как родной DATETIME. Это единственный разумный подход.

Почему вы так против использования надлежащего инструмента для работы?

person tadman    schedule 20.12.2012
comment
Я думаю, что сделаю это, так как таблица очень новая, и я могу просто начать преобразовывать дату RFC2822 в дату и время следующим образом: $timestamp = strtotime('Tue, 30 Sep 2008 10:30:00 EDT'); echo date('Y-m-d g:i:s a', $timestamp); - person Rick Scolaro; 21.12.2012
comment
Чем раньше вы сможете переключиться на нативные типы данных, тем лучше. По возможности используйте соответствующий тип столбца. Единственная причина для хранения строковых дат и времени — это если они поступают из стороннего источника данных, и вы хотите быть уверены, что преобразовали их правильно, сохраняя исходные и преобразованные значения для целей сравнения. - person tadman; 21.12.2012

Хранение временных меток в виде строки является плохим использованием функций базы данных. Поскольку все они были одного формата, их можно было легко преобразовать в дату и время при вводе.

person wallyk    schedule 20.12.2012