SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.03.2008 12:47:47

Юрий
Участник
Откуда: Владивосток
Зарегистрирован: 09.11.2007
Сообщений: 12

Хранение времени и даты

Подскажите как лучше всего хранить время и дату в базе mysql. Так что-бы можно было делать различные сортировки и т.д.

Неактивен

 

#2 20.03.2008 12:57:28

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Хранение времени и даты

Если нужны и дата и время, то либо TIMESTAMP, либо DATETIME.
С DATETIME всё понятно, при вставке записи указываете дату в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС.
С типом TIMESTAMP немного иначе. Если в таблице имеется больше двух полей этого типа, то начиная со второго поля, оно себя ведёт так же, как и при DATETIME. А вот первое поле при отсутствии значения, автоматически присваивает себе текущие дату и время (т.е. NOW()). Также значение этого поля будет само автоматически обновляться при обновлениях записей. Но это поведение по умолчанию, его можно немного изменить при надобности smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#3 20.03.2008 16:30:29

Юрий
Участник
Откуда: Владивосток
Зарегистрирован: 09.11.2007
Сообщений: 12

Re: Хранение времени и даты

Спасибо за ответ. Остановился на DATETIME. Назрел следующий вопрос, как мне теперь сортировать по годам, месяцам, дням?
Есть такая таблица:
id | putdate
1 | 2008-03-20 12:01:55
...
30| 2008-03-21 07:07:44

Неактивен

 

#4 20.03.2008 16:51:03

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Хранение времени и даты

Возможно я неправильно понял вопроса, но такого вопроса возникать не должно, ибо формат ГГГГ-ММ-ДД ЧЧ:ММ:СС позволяет сортировать даты как простые строки smile Т.е. Вам ничего дополнительно выдумывать не нужно, при ORDER BY `datetime_field` записи автоматически выстроятся в нужном порядке.

Или Вы имели ввиду конкретно сортировку только по году либо только по месяцу либо только по дню?


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#5 20.03.2008 16:52:39

Юрий
Участник
Откуда: Владивосток
Зарегистрирован: 09.11.2007
Сообщений: 12

Re: Хранение времени и даты

Да. Отдельно по году, отдельно по месяцу, отдельно по дню

Неактивен

 

#6 20.03.2008 17:03:24

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5840

Re: Хранение времени и даты

ORDER BY DAY(`datetime_field`) -- сортировка по дню

Аналогично YEAR, MONTH

Неактивен

 

#7 20.03.2008 17:06:32

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Хранение времени и даты

Вы можете использовать функции YEAR(), MONTH() и DAY() для определения года, месяца и дня соответственно применяя их к значению поля типа DATETIME. Таким образом, запросы

Код:

SELECT *, MONTH(`datetime_field`) AS `month` FROM `table` ORDER BY `month`;
SELECT * FROM `table` ORDER BY MONTH(`datetime_field`);

выдадут данные, отсортированные по месяцу даты.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#8 20.03.2008 17:15:05

Юрий
Участник
Откуда: Владивосток
Зарегистрирован: 09.11.2007
Сообщений: 12

Re: Хранение времени и даты

Блин, я щас понял, что мне нужна не сортировка, а группировка smile

Неактивен

 

#9 20.03.2008 17:25:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5840

Re: Хранение времени и даты

Аналогично.

GROUP BY DAY(`datetime_field`) -- группировка по дням

Аналогично YEAR и MONTH

Неактивен

 

#10 20.03.2008 17:30:16

Юрий
Участник
Откуда: Владивосток
Зарегистрирован: 09.11.2007
Сообщений: 12

Re: Хранение времени и даты

Спасибо огромное, разобрался. Замечательная вещь DATETIME smile
Не знаю как раньше обходился ...

Неактивен

 

#11 20.03.2008 17:30:25

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Хранение времени и даты

Группировка? smile Мне кажется, Вам нужна выборка))) Допустим, выбор записей за февраль:

Код:

SELECT * FROM `table` WHERE MONTH(`datetime_field`)=2;

smile

В общем, используйте эти удобные функции YEAR(), MONTH() и DAY() в нужных ситуациях. А в остальном всё работает так же, как и не с датами wink


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#12 26.03.2008 07:24:33

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: Хранение времени и даты

а как выбрать записи за прошедшую минуту?


я чайник, не ругайте сильно! )

Неактивен

 

#13 26.03.2008 10:26:47

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Хранение времени и даты

Ligalize написал:

а как выбрать записи за прошедшую минуту?

http://sqlinfo.ru/forum/viewtopic.php?pid=3354#p3354

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson