sql-server - 如何使用 Delphi 以 SQL Server 方式对 GUID 进行排序

标签 sql-server delphi sorting guid

在我正在处理的一个项目中,如果我可以对内存中的 guid 列表进行排序并与按这些相同 guid 排序的 SQL Server 表进行比较,那就太好了。不幸的是,当 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 端的排序。

最佳答案

Alberto Ferrari已经写了一篇关于它的博客文章。从那里:

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 按从右到左的顺序进行评估,并且是最重要的

关于sql-server - 如何使用 Delphi 以 SQL Server 方式对 GUID 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375639/

相关文章:

SQL - 划分一个值并确保它重新计算为原始值

sql - 如何在SQL Server中检索意外关闭的修改过程

delphi - 如何在对象字段值发生变化时定义断点?

delphi - 在Delphi IDE中编辑窗口之间切换的快捷方式?

delphi - 允许对嵌套在 FireMonkey TPopup 内的 FireMonkey TEdit 进行键盘输入

c# - 按位/ bool 值选择

sql-server - 从 SQL Server 的 XML 执行计划中提取数据

Java 通过使用比较器增加长度来对字符串数组进行排序

php - 在 PHP 或 MySQL 中按日期(月年)排序

c# - 如何根据 List<string> 字段数对 List<List<string>> 进行排序?