Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > как найти последнюю дату


Автор: Gold Dragon 15.11.2005, 13:57
У меня дата храниться в следующем виде
`data_user` varchar(8) NOT NULL default '00000000'

и соответственно даты записываются к примеру 15112005

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

Автор: Kesh 15.11.2005, 14:05
Red Dragon тебе надо будет преобразовывать 15112005 в 20051115 - а тогда уже сортировать по убыванию...
или преобразовывать varchar в date - а там уже опять по убыванию...
Добавлено @ 14:14
Что-то вроде этого... Проверить сейчас не могу - нету мускула под рукой...
Код

SELECT RIGHT(data_user,4)||SUBSTRING(data_user,3,2)||LEFT(data_user,2) AS `data_sort`
FROM `your_table`
ORDER BY `data_sort` DESC

Автор: Gold Dragon 15.11.2005, 14:31
Kesh
что-то не работает... поясни что там где

PS
а тупо найти максимальное значение по полю не получится?

Автор: Ignat 15.11.2005, 14:46
Цитата(Red @ 15.11.2005, 14:31)
а тупо найти максимальное значение по полю не получится?

В том варианте который есть нет.

Цитата(Red @ 15.11.2005, 14:31)
что-то не работает...

С ошибкой или без?

Автор: Kesh 15.11.2005, 15:42
Red Dragon может быть из-за || - это символ объединения строк... вместо него можно использовать +...
А там идет просто склеивание последних четырех символов (год) с двумя средними (месяц) и с двумя первыми (дата)...
Добавлено @ 15:43
Цитата(Kesh @ 15.11.2005, 15:42)
вместо него можно использовать +...

или CONCAT

Автор: Gold Dragon 15.11.2005, 16:24
я запускаю запрос в phpMyAdmin и он мне выдаёт, какой то странный результат.. таблицу с одним полем data_sort и со значениями 1
Добавлено @ 16:25
т.е. в таблице 23 записи... и выходит 23 записи, но с единицами

Автор: Ignat 15.11.2005, 16:32
Цитата(Kesh @ 15.11.2005, 15:42)
или CONCAT

Код

SELECT *, CONCAT(RIGHT(data_user,4), SUBSTRING(data_user,3,2), LEFT(data_user,2)) AS `data_sort`
FROM `your_table`
ORDER BY `data_sort` DESC

А так?

Автор: Kesh 15.11.2005, 17:57
Блин, ну дайте до дома добраться...
Я обязательно посмотрю...
Дома...
На своем мускуле...
smile

Автор: sergejzr 15.11.2005, 18:15
Храни время нормально! Иначе рано или поздно это всё равно боком выйдет!

Автор: Gold Dragon 16.11.2005, 09:18
Ignat
всё работает отлично

только поясните сам запросс... . возвращается новая строка из 4-х справа + 2 начиная с третьей позиции + 2 слева? а дальше что, создаётся временная таблица?

Автор: Kesh 16.11.2005, 10:42
Red Dragon Да нет... просто по этой новой строке и идет сортировка...

Добавлено @ 10:44
А вообще...

Цитата(sergej @ 15.11.2005, 18:15)
Храни время нормально! Иначе рано или поздно это всё равно боком выйдет!


Автор: Gold Dragon 16.11.2005, 11:30
Kesh
мне так удобнее хранить, просто на сайте так формируется... хотя подумаю

PS
зато расширил свои познания в запросах smile

Автор: Kesh 16.11.2005, 11:38
Red Dragon а ты себе представь, какая нагрузка ляжет на сервер при разбиении склеивании строк, когда этих строк в запросе станет более 10000... Ведь даже при выборе по LIMIT у тебя пееклеиваться буут все строки а потом уже будет срабатывать фильтр...

Автор: Ignat 16.11.2005, 12:39
По теме, почитай.
http://dev.mysql.com/doc/refman/4.0/ru/date-and-time-types.html

Автор: Gold Dragon 16.11.2005, 14:39
вы меня переубедили, буду переделывать на "нормальное" хранение....

а как в этом случае найти последнюю дату?

Автор: Ignat 16.11.2005, 14:42
В случае использования типа date?
Код

SELECT * FROM `table` ORDER BY `date` DESC LIMIT 1;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)