tsql-split guid/唯一标识符

bkhjykvo  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(272)

案例:我们在一个表中有智能guid,需要从中提取第二和第四部分。我在考虑写一个函数,可以接受@partnumber并返回它的提取值。
例如

DECLARE @Guid UNIQUEIDENTIFIER = 'A7DDAA60-C33A-4D7A-A2D8-ABF20127C9AE'

第一部分=a7ddaa60,第二部分=c33a,第三部分=4d7a,第四部分=a2d8,第五部分=abf20127c9ae
基于@partnumber,它将返回其中一个值。
我试图找出如何最有效地分割它(string\u split不能保证顺序)。

aamkag61

aamkag611#

我不太清楚你所说的“智能”guid到底是什么意思,但是为什么不直接将它转换成一个char并按位置拉出部分呢?

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)
piv4azn7

piv4azn72#

你可以使用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)

这是小提琴。

相关问题