![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка по дате [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]Строкой что-ли? Тогда наоборот делай... гггг.мм.дд