Конвертировать время в MySQL Time - PullRequest
0 голосов
/ 07 ноября 2010

Я пытаюсь сохранить расписание на неделю (например, понедельник, 9 утра до 5 вечера и т. Д.).У меня нет необходимости хранить даты;Мне просто нужно сохранить следующее: день, время от времени.

Итак, скажем, у меня есть следующие значения времени:

  • 1: 20 вечера
  • 1320
  • 8: 00 AM
  • и т. Д.

Предполагая, что значения являются действительными действительными временами, как я могу преобразовать эти строки в тип MySQL Time?И как мне сделать обратное?(Я использую PHP.)

Кроме того, как мне запросить что-то вроде этого: найти каждый магазин, который открыт по понедельникам с 14:00 до 15:00?Должен ли я просто сделать что-то вроде: WHERE day = 1 AND from_time> = 2pm AND to_time <= 3pm (меняя '2pm' и '3pm' на их конвертированные значения, конечно)?Или какая-то функция MySQL лучше подходит для таких запросов? </p>

Ответы [ 3 ]

1 голос
/ 07 ноября 2010

В MySQL встроено преобразование меток времени Unix в дату MySQL:

INSERT INTO table (the_date) VALUES (FROM_UNIXTIME(your_timestamp));

... и наоборот ...

SELECT UNIX_TIMESTAMP(the_date) FROM table;

Вы можете использовать функции DAY() и DAYOFWEEK() в ваших условных обозначениях WHERE, чтобы преобразовать ваши временные метки MySQL в соответствующие единицы для выполнения вашего запроса.

Возможно, вам придется немного поэкспериментировать со своей схемой, чтобы определить наилучшую структуру, которая позволит вам получить необходимую вам функциональность здесь. Например. может не иметь смысла хранить день недели в поле даты и времени.

0 голосов
/ 07 ноября 2010

MySQL имеет тип данных TIME - он будет хранить значения в формате hh: mi: ss, и вы можете использовать функцию TIME_FORMAT , чтобы изменить представление на ваше " мне нравится.

Старайтесь не полагаться на функции, примененные к столбцу для сравнения - IE:

WHERE TIME_TO_SEC(column) = 123

... потому что он будет отображать индекс, если он существует в столбце, бесполезный - обеспечение сканирования таблицы (наихудший вариант).

0 голосов
/ 07 ноября 2010

MySQL понимает формат даты ISO 8601, поэтому вам нужно указывать время в форме "08:00:00" для 8:00.

Вы можете просто использовать строку с действительным ISO 8601время в предложении WHERE.

http://en.wikipedia.org/wiki/ISO_8601

http://dev.mysql.com/doc/refman/5.1/en/time.html

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...