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

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

Сортировка по дате [D7]


Шакал ©   (2007-05-14 10:05:00) 

Уважаемые мастера, нуна помощь!!
нужно по дате сортировать... пишу 'select * from kadry order by Дата'
он сортирует, но только по первому числу (по дате) а месяц и год неучитывает
формат даты в столбе дд.мм.гггг


fd979   (2007-05-14 12:49:00) [1]

select * from kadry order by CDate(Дата)


DVM   (2007-05-14 11:20:00) [2]


> Knight ©  

Вот так сортирует верно любые буквенно-цифровые строки

function MyCompare(ps1, ps2: PChar): integer;
const
 Digits = ['0'..'9'];
var
 DigCnt: integer;
begin
 DigCnt := 0;
 while (ps1^ = ps2^) and (ps1^ <> #0) do
   begin
     Inc(ps1);
     Inc(ps2);
     Inc(DigCnt)
   end;
 result := integer(ps1^) - byte(ps2^);
 if (ps1^ = #0) or (ps2^ = #0) then exit;
 if ps1^ in Digits then
   begin
     if ps2^ in Digits then
       begin
         DigCnt := 0;
         while (ps1^ in Digits) do
           begin
             inc(DigCnt);
             inc(ps1)
           end;
         while (ps2^ in Digits) do
           begin
             dec(DigCnt);
             inc(ps2)
           end;
         if DigCnt <> 0 then result := DigCnt
       end
     else
       begin
         if DigCnt <> 0 then
           if (ps1-1)^ in Digits then result := 1;
       end;
   end
 else
   begin
      if ps2^ in Digits then
        if DigCnt <> 0 then
          if (ps1-1)^ in Digits then result := -1;
   end;
end;


DVM   (2007-05-14 11:09:00) [3]


> Мухлюете, батенька %)

Есть немного :)


Knight   (2007-05-14 11:04:00) [4]

to DVM

Мухлюете, батенька %)

Стандартная функция сортировки отсортирует так...

01
02
10
11


Knight   (2007-05-14 10:58:00) [5]

> [10] DVM ©   (14.05.07 10:48)
> не факт. 01 02 10 11 - отсортирует неверно.



> [13] DVM ©   (14.05.07 10:56)
> числа 1 2 10 11 стандартная функция сортировки отсортирует
> так : 1 10 11 2


Куда пропали вдруг нули из СТРИНГА? :)))


DVM   (2007-05-14 10:56:00) [6]


> Knight ©   (14.05.07 10:52) [11]
> > [10] DVM ©   (14.05.07 10:48)
>
> Почему это?

числа 1 2 10 11 стандартная функция сортировки отсортирует так : 1 10 11 2


Шакал   (2007-05-14 10:53:00) [7]

Всем спасибо....действитель в базе поля где хранятся даты стоял формат стринг, поменял на даты и все пошло :)
СПАСИБО


Knight   (2007-05-14 10:52:00) [8]

> [10] DVM ©   (14.05.07 10:48)

Почему это?


DVM   (2007-05-14 10:48:00) [9]


> т.е. чтобы строка была отсортирована верно, надо, чтобы
> сперва шёл год, поом месяц, а потом день.

не факт. 01 02 10 11 - отсортирует неверно.


DVM   (2007-05-14 10:47:00) [10]


> Шакал ©

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

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


Knight   (2007-05-14 10:35:00) [11]

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

02.04.2007 < 14.05.2007 (0<1)
14.05.2006 < 14.07.2000 (5<7)

т.е. чтобы строка была отсортирована верно, надо, чтобы сперва шёл год, поом месяц, а потом день.


Шакал   (2007-05-14 10:25:00) [12]

бд acces.....


Шакал   (2007-05-14 10:25:00) [13]

и что это за дата будет 14052007
у меня она визуальная...:(


Knight   (2007-05-14 10:24:00) [14]

> [0] Шакал ©   (14.05.07 10:05)

И всё-таки желательно указывать, что за СУБД...


Knight   (2007-05-14 10:24:00) [15]

Или попробуй вместо стринга, нормальный датовский формат... или формат даты юникс.


Knight   (2007-05-14 10:21:00) [16]

> [2] Шакал ©   (14.05.07 10:20)

Тогда точки убери :)


Шакал   (2007-05-14 10:20:00) [17]

тогда он будет по году сортировать(((
а я хочу что бы по всем трем числам сортировал..


Knight   (2007-05-14 10:08:00) [18]

Строкой что-ли? Тогда наоборот делай... гггг.мм.дд


Наверх

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