Сортировка списка GUID в памяти по алгоритму SQL ServerDelphi , Базы данных , Сортировка и Фильтр
В проекте, над которым я работаю, было бы полезно иметь возможность сортировать список GUID в памяти и сравнивать его с таблицей SQL Server, отсортированной по тем же GUID. К сожалению, когда отсортированный список возвращается из SQL Server, порядок не сразу очевиден. Какой лучший способ отсортировать этот список в памяти так, чтобы порядок был таким же, как и в возвращенном SQL Server? Например, запрос "SELECT ID FROM TABLE1 ORDER BY ID" возвращает:
Для целей этого вопроса предположим, что у меня есть массив строк, содержащий значения GUID в следующем порядке:
Я хочу увидеть, что одного из SQL-запроса не хватает, а один из него отсутствует. Самый быстрый способ очевиден - иметь оба списка отсортированными одинаково, но я не хочу выполнять запрос, подобный "SELECT ID FROM TABLE1 ORDER BY CAST(ID AS VARCHAR(100))", а предпочитаю исправить сортировку на стороне Delphi. SQL Server сортирует GUID в следующем порядке: первые 4 байта (0-3), затем следующие 2 байта (4-5), затем следующие 2 байта (6-7), затем последние 2 байта (8-9) в обратном порядке, и finally the last 2 bytes (A-F) в обратном порядке. Это наиболее важные биты. Вот как можно отсортировать список GUID в памяти в том же порядке, что и SQL Server, используя Delphi:
Этот код сначала преобразует GUID в массив байтов, а затем сравнивает каждый байт в обратном порядке, как это делает SQL Server. После сравнения всех байтов функция CompareGUIDs возвращает -1, если guid1 меньше guid2, 0, если они равны, или 1, если guid1 больше guid2. Функция SortGUIDs использует CompareGUIDs для сортировки списка GUID по алгоритму SQL Server. Практический вопрос о сортировке списка GUID в памяти в том же порядке, что и SQL Server, используя Delphi. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Сортировка и Фильтр ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |