|
05.02.2011, 10:56
|
|
NodeJS developer - ушел
|
|
Регистрация: 06.01.2010
Сообщений: 1,022
|
|
MySQl дата между двух дат
Подскажите пожалуйста.
В mysql дату храню не правильно, в виде varchar.
Раньше для дня,месяца и года были поля отдельно и необходимый поиск по
двух датам работал отлично.
Теперь надо хранить дату в одном поле.
Конечно с помощью php не особо трудно вывести даты которые в промежутке двух дат, но хотелось бы sql запросом это делать.
Можете подсказать.
Т.е. на сервер передается дата начала и дата окончания
надо вывести все даты из этого промежутка.
Почему использую varchar, потому что не хочет записывать дату в поле с типом date, а записывает как то так 0000:00 00 Разбираться особо не хотелось и сделал по простому.
|
|
05.02.2011, 11:12
|
|
Злюка-бобер
|
|
Регистрация: 21.03.2010
Сообщений: 438
|
|
Я бы все-таки посоветовал разобраться с датой. Стандартный формат хранения даты для полей соответствующих типов, таких как DATE, такой: yyyy-mm-dd. Соответственно, при записи в базу даты вида dd.mm.yyyy ее надо сначала привести в "правильный" формат. А уж затем выбор диапазона дат будет простейшим делом.
__________________
In WEB We Trust
У всех есть своя темная сторона...
|
|
05.02.2011, 19:55
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Можно хранить UNIX TIMESTAMP даты - тогда просто выборка вроде date < MAX AND date > MIN. Еще и сэкономить получится.
|
|
06.02.2011, 22:16
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от mycoding
|
Почему использую varchar, потому что не хочет записывать дату в поле с типом date, а записывает как то так 0000:00 00 Разбираться особо не хотелось и сделал по простому.
|
надо было закрутить винт с правосторонней резьбой. Не разобрался, как его закрутить, поэтому сделал по-простому - забил молотком
Сообщение от B@rmaley.e><e
|
Можно хранить UNIX TIMESTAMP даты - тогда просто выборка вроде date < MAX AND date > MIN. Еще и сэкономить получится.
|
ну зачем, если в mysql для этого есть специальные типы столбцов, м?
|
|
11.02.2011, 12:44
|
Ламер
|
|
Регистрация: 19.02.2010
Сообщений: 295
|
|
mycoding,
[SQL]
BEGIN
SET @last_date = begin_date;
DROP TABLE IF EXISTS temp_calendar;
CREATE TEMPORARY TABLE temp_calendar(
date DATE NOT NULL,
KEY days (date)
) ENGINE = MyIsam;
WHILE @last_date <= end_date DO
insert into temp_calendar(date) values(@last_date);
SET @last_date = DATE_ADD(@last_date, interval 1 day);
END WHILE;
END
[/SQL]
Это хранимка, вызываешь ее перед SQL запросом, и в таблице temp_calendar будут даты из промежутка, по завершению запроса таблица удалится. Вызывается с параметрами "дата начала" и "дата окончания"
|
|
11.02.2011, 18:54
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
DooMer, а если ТС спросит, как осуществить самоэвтаназию... ты ему тоже все подробно расскажешь?
|
|
11.02.2011, 18:56
|
|
Злюка-бобер
|
|
Регистрация: 21.03.2010
Сообщений: 438
|
|
Сообщение от x-yuri
|
DooMer, а если ТС спросит, как осуществить самоэвтаназию... ты ему тоже все подробно расскажешь?
|
Offtop: некоторым я бы рассказал...
__________________
In WEB We Trust
У всех есть своя темная сторона...
|
|
14.02.2011, 09:43
|
Ламер
|
|
Регистрация: 19.02.2010
Сообщений: 295
|
|
x-yuri,
просто самому в свое время пришлось писать, была готовая, почему бы не поделится ?
|
|
14.02.2011, 15:23
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от DooMer
|
просто самому в свое время пришлось писать, была готовая, почему бы не поделится ?
|
продолжая параллель: просто самому в свое время пришлось самоубиваться. Но тем не менее откачали и в результате остался инвалидом на всю жизнь. Почему бы не посоветовать?
|
|
|
|