Delphi Table sorting - PullRequest
       0

Delphi Table sorting

1 голос
/ 27 ноября 2011

У меня есть простая проблема, из-за которой у них болит голова

Мне нужно отсортировать целые числа в таблице базы данных TDBGrid (ее база данных ABS из компонента ace) в следующем порядке

  • 0
  • 1
  • 11
  • 111
  • 121
  • 2
  • 21
  • 211
  • 22 * ​​1022 *
  • 221

и т. Д.

, что означает, что каждое число, начинающееся с 1, должно быть меньше 1

  • 1
  • 11
  • 111
  • 5
  • 55

Кто-нибудь может мне помочь?

спасибо

Ответы [ 3 ]

1 голос
/ 27 ноября 2011

Это должно работать, чтобы получить вещи в правильном порядке:

  1. Преобразовать исходное число в строку;
  2. Правая клавиша с нулями, пока у вас не будет строки шириной 3 символа;
  3. (необязательно). Преобразовать обратно в целое число.

Тогда сортировка всегда должна работать так, как вы хотите. Возможно, лучше всего позволить базе данных сделать это за вас. В MySQL вы бы сделали что-то вроде этого:

select RPAD(orderid,3,'0') as TheOrder 
from MyTable 
order by 1
1 голос
/ 27 ноября 2011

Я только что запустил это в SQL Server Management Studio - обратите внимание, я перепутал строки во входных данных, чтобы они не были отсортированы в порядке:

create table #temp( ID Char(3));
insert into #temp (ID) 
      select '111' union
      select '221';
      select '0' union 
      select '21' union
      select '1' union 
      select '11' union
      select '211' union
      select '121' union
      select '2' union
      select '22' union
select * from #temp order by ID;

Я получил следующий вывод:

ID
----
0  
1  
11 
111
121
2  
21 
211
22 
221

(10 row(s) affected)

Если вы получаете разные результаты, вы делаете что-то не так. Однако трудно сказать что, потому что вы ничего не опубликовали о том, как вы извлекаете данные из базы данных.

Редактировать: Некоторые пояснения автора указывают, что дисплей находится в TDBGrid, прикрепленном к таблице с использованием Component Ace ABS Database. Если это действительно так, то ответ состоит в том, чтобы создать индекс для указанного столбца, а затем установить свойство таблицы IndexName для использования этого индекса.

0 голосов
/ 27 ноября 2011

select cast(INT_FIELD as varchar(9)) as I from TABxxx order by 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...