整体 - 拆分 w=10=sh
TSQL - Split GUID/UNIQUEIDENTIFIER
案例:我们在 table 中有智能向导,需要从中提取第二和第四部分。我正在考虑编写一个可以接收@partnumber 和return 提取值的函数。
例如
DECLARE @Guid UNIQUEIDENTIFIER = 'A7DDAA60-C33A-4D7A-A2D8-ABF20127C9AE'
1st part = A7DDAA60, 2nd part = C33A, 3rd part = 4D7A, 4th part =
A2D8, and 5th part = ABF20127C9AE
根据@partnumber,它将return这些值之一。
我正在尝试弄清楚如何最有效地拆分它(STRING_SPLIT 不保证顺序)。
我不确定您所说的“智能”向导到底是什么意思,但为什么不将其转换为字符并按位置提取零件呢?
create table t(myguid uniqueidentifier);
declare @p tinyint = 5;
select case @p
when 1 then left(c.v, 8)
when 2 then substring(c.v, 10, 4)
when 3 then substring(c.v, 15, 4)
when 4 then substring(c.v, 20, 4)
when 5 then right(c.v, 12)
end
from t
cross apply (select cast(t.myguid as char(36))) c(v)
可以使用,OPENJSON
DECLARE @Guid UNIQUEIDENTIFIER = 'A7DDAA60-C33A-4D7A-A2D8-ABF20127C9AE',
@s varchar(100)
Select @s = replace(@guid,'-','","')
Select * from
(
Select [key] + 1 as Poistion, Value as Part
FROM OPENJSON('["' + @s + '"]')
) Q
Where Poistion in (2,4)
这里是 fiddle.
案例:我们在 table 中有智能向导,需要从中提取第二和第四部分。我正在考虑编写一个可以接收@partnumber 和return 提取值的函数。
例如
DECLARE @Guid UNIQUEIDENTIFIER = 'A7DDAA60-C33A-4D7A-A2D8-ABF20127C9AE'
1st part = A7DDAA60, 2nd part = C33A, 3rd part = 4D7A, 4th part = A2D8, and 5th part = ABF20127C9AE
根据@partnumber,它将return这些值之一。
我正在尝试弄清楚如何最有效地拆分它(STRING_SPLIT 不保证顺序)。
我不确定您所说的“智能”向导到底是什么意思,但为什么不将其转换为字符并按位置提取零件呢?
create table t(myguid uniqueidentifier);
declare @p tinyint = 5;
select case @p
when 1 then left(c.v, 8)
when 2 then substring(c.v, 10, 4)
when 3 then substring(c.v, 15, 4)
when 4 then substring(c.v, 20, 4)
when 5 then right(c.v, 12)
end
from t
cross apply (select cast(t.myguid as char(36))) c(v)
可以使用,OPENJSON
DECLARE @Guid UNIQUEIDENTIFIER = 'A7DDAA60-C33A-4D7A-A2D8-ABF20127C9AE',
@s varchar(100)
Select @s = replace(@guid,'-','","')
Select * from
(
Select [key] + 1 as Poistion, Value as Part
FROM OPENJSON('["' + @s + '"]')
) Q
Where Poistion in (2,4)
这里是 fiddle.