SQL 选择查询中的 GUID 比较

编程


各位,

我有一张表,其列为 唯一标识符 数据类型。 在这里我想选择与唯一标识符数据进行比较的记录。

前任:

SQL
CREATE TABLE [dbo].[Table1](
    [Id] [uniqueidentifier] NOT NULL,
    [Name] [nvarchar] (100) NOT NULL

SQL
SELECT * FROM Table1 WHERE Id <= 'A8912F3C-81BE-4076-B6AB-0000017330AD'

可以选择记录吗? 请推荐我

解决方案1

这是一个毫无意义的查询 – Guid 术语中的“小于或等于”没有实际意义。 哪些记录“小于”Guid? 实际上是未定义的,因为指南不是按任何特定顺序发布的。 下一个 Guid 问题可能以“2”、“F”或另一个“A”开头。

不要尝试根据任何顺序比较指南 – 这个概念对他们来说毫无意义。

您想做什么,您认为“<=”与指南会有帮助?

解决方案2

如果我错了,其他人必须纠正我,但我不相信你可以使用 <= 或者 >= 具有唯一标识符的运算符。

最好的选择是相等运算符:

SQL
SELECT * FROM Table1 WHERE Id = 'A8912F3C-81BE-4076-B6AB-0000017330AD'

如果你想查询一系列唯一标识符,你可以使用 where.. in 条款:

SQL
SELECT * FROM Table1 WHERE Id IN ('A8912F3C-81BE-4076-B6AB-0000017330AD', 'B8912F3C-81BE-4076-B6AB-0000017330AD', 'C8912F3C-81BE-4076-B6AB-0000017330AD')

解决方案3

致未来寻求这个答案的人。
当然,可以比较 guid,但它是 guid 的最后一部分,具有有效数字。

例如,您想将查询分成两部分,您可以执行以下操作:

SQL
SELECT * FROM Table1 WHERE Id <= 'FFFFFFFF-FFFF-FFFF-FFFF-7FFFFFFFFFFF';
SELECT * FROM Table1 WHERE Id >= '00000000-0000-0000-0000-800000000000';

コメント

タイトルとURLをコピーしました