Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   MySQl дата между двух дат (https://javascript.ru/forum/server/14916-mysql-data-mezhdu-dvukh-dat.html)

mycoding 05.02.2011 10:56

MySQl дата между двух дат
 
Подскажите пожалуйста.
В mysql дату храню не правильно, в виде varchar.
Раньше для дня,месяца и года были поля отдельно и необходимый поиск по
двух датам работал отлично.
Теперь надо хранить дату в одном поле.
Конечно с помощью php не особо трудно вывести даты которые в промежутке двух дат, но хотелось бы sql запросом это делать.

Можете подсказать.

Т.е. на сервер передается дата начала и дата окончания
надо вывести все даты из этого промежутка.

Почему использую varchar, потому что не хочет записывать дату в поле с типом date, а записывает как то так 0000:00 00 Разбираться особо не хотелось и сделал по простому.

SkyLight 05.02.2011 11:12

Я бы все-таки посоветовал разобраться с датой. Стандартный формат хранения даты для полей соответствующих типов, таких как DATE, такой: yyyy-mm-dd. Соответственно, при записи в базу даты вида dd.mm.yyyy ее надо сначала привести в "правильный" формат. А уж затем выбор диапазона дат будет простейшим делом.

B@rmaley.e><e 05.02.2011 19:55

Можно хранить UNIX TIMESTAMP даты - тогда просто выборка вроде date < MAX AND date > MIN. Еще и сэкономить получится.

x-yuri 06.02.2011 22:16

Цитата:

Сообщение от mycoding
Почему использую varchar, потому что не хочет записывать дату в поле с типом date, а записывает как то так 0000:00 00 Разбираться особо не хотелось и сделал по простому.

надо было закрутить винт с правосторонней резьбой. Не разобрался, как его закрутить, поэтому сделал по-простому - забил молотком ;)

Цитата:

Сообщение от B@rmaley.e><e
Можно хранить UNIX TIMESTAMP даты - тогда просто выборка вроде date < MAX AND date > MIN. Еще и сэкономить получится.

ну зачем, если в mysql для этого есть специальные типы столбцов, м?

DooMer 11.02.2011 12:44

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 будут даты из промежутка, по завершению запроса таблица удалится. Вызывается с параметрами "дата начала" и "дата окончания"

x-yuri 11.02.2011 18:54

DooMer, а если ТС спросит, как осуществить самоэвтаназию... ты ему тоже все подробно расскажешь?

SkyLight 11.02.2011 18:56

Цитата:

Сообщение от x-yuri (Сообщение 92058)
DooMer, а если ТС спросит, как осуществить самоэвтаназию... ты ему тоже все подробно расскажешь?

Offtop: некоторым я бы рассказал...

DooMer 14.02.2011 09:43

x-yuri,
просто самому в свое время пришлось писать, была готовая, почему бы не поделится ?

x-yuri 14.02.2011 15:23

Цитата:

Сообщение от DooMer
просто самому в свое время пришлось писать, была готовая, почему бы не поделится ?

продолжая параллель: просто самому в свое время пришлось самоубиваться. Но тем не менее откачали и в результате остался инвалидом на всю жизнь. Почему бы не посоветовать? ;)


Часовой пояс GMT +3, время: 22:36.