Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сортировка в FireBird 1.5 [FireBird 1.5]


DelphiN! ©   (2008-02-18 12:24:00) 

Есть запрос :


SELECT distinct(EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_)),SUM(SUMM_)
FROM CaseBase WHERE (TIME_ > '13.08.2007')and(TIME_ < '14.09.2007')
GROUP BY 1
ORDER BY 1


Данные должны сортироваться по дате, однако сортировка происходит неправильно.
Как сделать даты в этом запросе сортируемые при помощи ORDER BY или иными способами?


Prohodil Mimo   (2008-02-25 14:18:00) [1]

DelphiN! ©   (18.02.08 12:24)
SELECT distinct(EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_)),SUM(SUMM_)
FROM CaseBase WHERE (TIME_ > '13.08.2007')and(TIME_ < '14.09.2007')
GROUP BY 1
ORDER BY Time_


должно прокатить.

Но
EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_)
это изврат. Ставь на клиенте в датасете формат dd.mm.yyyy и не парься.


Johnmen   (2008-02-20 15:00:00) [2]


> Sirus   (20.02.08 13:28) [17]
> Я имею ввиду ... условие ... будет обрабатываться неправильно...

Абсолютно правильно. В соответствии с типом.


Sirus   (2008-02-20 13:28:00) [3]


> Johnmen ©   (20.02.08 10:45) [15]
> Что за бред?

Это не бред :) Я имею ввиду что если дата хранится в строковом типе то условие (TIME_ > '13.08.2007')and(TIME_ < '14.09.2007')будет обрабатываться неправильно... то есть '20.08.2007' сюда не попадет, так как больше '14.09.2007'


ПРавильный_ВАся   (2008-02-20 11:52:00) [4]


> Спасибо всем, буду переводить базы в 3ий диалект и использовать CAST

чем бы дитя не тешилось...
ты вместо того, чтобы думать, схватился за первый попавшийся не требующий думанья пункт
вовсе не обязательно переводить в 3-й диалект, чтоб работать с датой как с датой
в 1-м диалекте тип DATE включает в себя дату и время, что для тебя вполне достаточно для сортировки
а на клиенте можно просто у TDateTimeField поставить формат отображения без времени


Johnmen   (2008-02-20 10:45:00) [5]


> Sirus   (20.02.08 05:49) [12]
> ... если тип Time_ varchar (строковой), то тут WHERE (TIME_ > '13.08.2007')and(TIME_ < '14.09.2007')
> тоже будут глюки и Firebird зараза не захочет правильно их обрабатывать...

Что за бред?


Виталий Панасенко   (2008-02-20 09:17:00) [6]


> DelphiN!   (20.02.08 08:03) [13]
> Спасибо всем, буду переводить базы в 3ий диалект и использовать
> CAST ...

В 3-м диалекте есть тоже тип DATE.. но там только день,месяц, год


DelphiN!   (2008-02-20 08:03:00) [7]

Спасибо всем, буду переводить базы в 3ий диалект и использовать CAST ...


Sirus   (2008-02-20 05:49:00) [8]

И еще в догонку... если тип Time_ varchar (строковой), то тут WHERE (TIME_ > '13.08.2007')and(TIME_ < '14.09.2007') тоже будут глюки и Firebird зараза не захочет правильно их обрабатывать... А если тип Time_ Date (дата) то distinct(EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_)) нафиг не нужен...


Виталий Панасенко(дом)   (2008-02-19 23:47:00) [9]


> DelphiN!   (19.02.08 13:44) [9]
>
>
> > Johnmen ©   (19.02.08 13:39) [8]
>
>
> Запрос выводит верные данные, в конкретном запросе я все
> понимаю, не понимаю только то, как сделать такой же по результативности
> запрос, только с сортировкой, поэтому и пишу здесь

Потому что строка вида "01.01.2008" , так скажем, МЕНЬШЕ чем строка вида "02.01.2007". Пора бы действительно, букварь почитать. Хотя бы о сравнении строк. а вот такие строки будут сортироваться правильно:
"2007.01.02"
"2008.01.01"


Правильный_Вася   (2008-02-19 14:02:00) [10]


> DelphiN!   (19.02.08 13:44) [9]

зубочисткой мышь тоже можно убить


DelphiN!   (2008-02-19 13:44:00) [11]


> Johnmen ©   (19.02.08 13:39) [8]


Запрос выводит верные данные, в конкретном запросе я все понимаю, не понимаю только то, как сделать такой же по результативности запрос, только с сортировкой, поэтому и пишу здесь


Johnmen   (2008-02-19 13:39:00) [12]


> DelphiN! ©   (19.02.08 13:33) [7]
> Если бы я его не понимал, то не написал бы.

Значит ты его списал.
А то, что ты ничего не понимаешь в списанном, однозначно подтверждает [0] и [3].


DelphiN!   (2008-02-19 13:33:00) [13]


> atruhin ©   (18.02.08 16:55) [5]


А в 1ом диалекте?


> Johnmen ©   (18.02.08 17:46) [6]


Если бы я его не понимал, то не написал бы. Запрос выводит верные данные, не хватает только сортировки


Johnmen   (2008-02-18 17:46:00) [14]

Боже мой! Как все запущено!
И что характерно, автором пишется запрос, в котором он вообще ничего не понимает. Ни функции, ни сортировки....

>DelphiN! ©

Короче. Изучаешь букварь, потом приходишь с вопросами.


atruhin   (2008-02-18 16:55:00) [15]

> Если не так, то как иначе извлечь из строки dd.MM.yyyy hh:
> nn:ss строку формата dd.MM.yyyy?

Зачем? Цель?
Вообще cast(Time_ as DATE), если база в 3 диалекте.


Правильный_Вася   (2008-02-18 15:58:00) [16]

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


DelphiN!   (2008-02-18 15:54:00) [17]


> sniknik ©   (18.02.08 12:35) [1]
>
> ну или если именно в этом запросе то хотябы
> год с днем местами поменять.
>


На моем компьютере установлен формат даты dd.MM.yyyy

В строке distinct(EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_))очередность дня месяца и года указана такая-же как и в формате даты на компьютере
DAY - день
MONTH - месяц
YEAR - год

Если не так, то как иначе извлечь из строки dd.MM.yyyy hh:nn:ssстроку формата dd.MM.yyyy?


atruhin   (2008-02-18 15:07:00) [18]

А вначале объясни, чего ты хочешь добиться таким вопросом? Что за изврат?


sniknik   (2008-02-18 12:35:00) [19]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо