连接 2 个表,一个带破折号的 GUID,一个不带
Joining 2 tables, one GUID with dashes, one without
我正在尝试连接多个表 - 问题是其中一个表中的 GUID 没有破折号。
到目前为止,我在研究中发现的是这种转换单个 guid 的方法:
DECLARE @uuid VARCHAR(50)
SET @uuid = 'ecd5bc3f5cf741acabbbf0fb17634970'
SELECT CAST(
SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' +
SUBSTRING(@uuid, 17, 4) + '-' + SUBSTRING(@uuid, 21, 12)
AS UNIQUEIDENTIFIER);
但是我如何使用它根据结果连接表格?
还是有完全不同的方式?
进行连接的一种方法是转换为字符串:
select . . .
from t t1 join
t t2
on t1.uuid = replace(convert(varchar(36), t2.uuid), '-', '')
我应该注意到这使得优化变得困难。您可能想要修改您的第一个 table 以拥有一个具有正确类型的 uuid 列:
alter table t1 add uuid_correct as
(convert(uniqueidentifier,
substring(@uuid, 1, 8) + '-' + substring(@uuid, 9, 4) + '-' + substring(@uuid, 13, 4) + '-' +
substring(@uuid, 17, 4) + '-' + substring(@uuid, 21, 12)
)
);
您可以保留该列并在其上建立索引。
我正在尝试连接多个表 - 问题是其中一个表中的 GUID 没有破折号。
到目前为止,我在研究中发现的是这种转换单个 guid 的方法:
DECLARE @uuid VARCHAR(50)
SET @uuid = 'ecd5bc3f5cf741acabbbf0fb17634970'
SELECT CAST(
SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' +
SUBSTRING(@uuid, 17, 4) + '-' + SUBSTRING(@uuid, 21, 12)
AS UNIQUEIDENTIFIER);
但是我如何使用它根据结果连接表格? 还是有完全不同的方式?
进行连接的一种方法是转换为字符串:
select . . .
from t t1 join
t t2
on t1.uuid = replace(convert(varchar(36), t2.uuid), '-', '')
我应该注意到这使得优化变得困难。您可能想要修改您的第一个 table 以拥有一个具有正确类型的 uuid 列:
alter table t1 add uuid_correct as
(convert(uniqueidentifier,
substring(@uuid, 1, 8) + '-' + substring(@uuid, 9, 4) + '-' + substring(@uuid, 13, 4) + '-' +
substring(@uuid, 17, 4) + '-' + substring(@uuid, 21, 12)
)
);
您可以保留该列并在其上建立索引。