在我正在处理的一个项目中,如果我可以对内存中的 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/