Как отсортировать GUID по-SQL Server, используя Delphi - PullRequest
4 голосов
/ 04 марта 2010

В проекте, над которым я работаю, было бы неплохо, если бы я мог отсортировать список направляющих в памяти и сравнить с таблицей SQL-сервера, упорядоченной по тем же руководствам.К сожалению, когда SQL Server возвращает упорядоченный список, порядок становится не сразу очевидным.

Как лучше всего отсортировать это в списке памяти так, чтобы порядок совпадал с тем, который будет возвращен SQL Server?

Например, запрос "SELECT ID FROM TABLE1 ORDER BY ID" возвращает:

A46030EC-BF3A-4F7C-88CC-00117DBC1A52
159A0A9D-18B7-4D6C-ABB3-005FAB666D91
3C58CFC5-1829-481C-9686-007CE71132B8
15A96D5F-DAFB-4EF1-9202-00B201CE5151
BCFDE733-0AB0-483F-B912-00BF93F6FA7E
6CC06558-7670-4879-9D3F-00CB3D3649BD

Ради этого вопроса, предположим, у меня есть массив строк, которые содержат значения guid выше, но в следующем порядке:

159A0A9D-18B7-4D6C-ABB3-005FAB666D91
15A96D5F-DAFB-4EF1-9202-00B201CE5151
6CC06558-7670-4879-9D3F-00CB3D3649BD
8A9325AF-A84E-4BDB-AFA8-C9D09D7FC064
A46030EC-BF3A-4F7C-88CC-00117DBC1A52
BCFDE733-0AB0-483F-B912-00BF93F6FA7E

Я хочу видетьчто мне не хватает одного из запроса SQL, и есть тот, которого не было в запросе SQL.Самый быстрый способ, очевидно, состоит в том, чтобы оба списка сортировались одинаково, но я не хочу выполнять запрос, такой как "SELECT ID FROM TABLE1 ORDER BY cast(ID as varchar(100))", а скорее исправлю сортировку на стороне Delphi.

1 Ответ

8 голосов
/ 04 марта 2010

Альберто Феррари написал в блоге запись об этом. Оттуда:

0 1 2 3  4 5  6 7  8 9  A B C D E F
00000000-0000-0000-0000-010000000000
  • 0..3 оцениваются в порядке слева направо и являются менее важными, чем
  • 4..5 оцениваются в порядке слева направо, затем
  • 6..7 оцениваются в порядке слева направо, затем
  • 8..9 оцениваются в порядке справа налево, затем
  • A..F оцениваются в порядке справа налево и являются наиболее важными
...