整体 - 拆分 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.