T SQL - разделить GUID / UNIQUEIDENTIFIER - PullRequest
0 голосов
/ 08 июля 2020

Случай: У нас есть смарт-гиды в таблице, и нам нужно извлечь из нее 2-ю и 4-ю части. Я думал о написании функции, которая может принимать @partnumber и возвращать для него извлеченное значение.

например,

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

1-я часть = A7DDAA60, 2-я часть = C33A, 3-я часть = 4D7A, 4-я часть = A2D8 и 5-я часть = ABF20127C9AE

На основе номера @partnumber будет возвращено одно из этих значений.

Я пытаюсь понять узнайте, как наиболее эффективно разделить его (STRING_SPLIT не гарантирует порядок).

Ответы [ 2 ]

1 голос
/ 08 июля 2020

Вы можете использовать, ОТКРЫТЬ JSON

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)

Вот скрипка .

1 голос
/ 08 июля 2020

Я не совсем понимаю, что вы подразумеваете под «умными» направляющими, но почему бы просто не преобразовать его в 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)
    
...