[sql] SQL Server에서 varchar를 uniqueidentifier로 변환

스키마를 제어 할 수없는 테이블에는 ‘a89b1acd95016ae6b9c8aabb07da2010′(하이픈 없음) 형식으로 고유 식별자를 저장하는 varchar (50)로 정의 된 열이 포함되어 있습니다.

.Net Guid에 전달하기 위해 SQL의 고유 식별자로 변환하고 싶습니다. 그러나 다음 쿼리 줄은 작동하지 않습니다.

select cast('a89b1acd95016ae6b9c8aabb07da2010' as uniqueidentifier)
select convert(uniqueidentifier, 'a89b1acd95016ae6b9c8aabb07da2010')

결과 :

메시지 8169, 수준 16, 상태 2, 줄 1
문자열에서 uniqueidentifier로 변환 할 때 변환에 실패했습니다.

하이픈이있는 고유 식별자를 사용하는 동일한 쿼리는 제대로 작동하지만 데이터는 해당 형식으로 저장되지 않습니다.

이러한 문자열을 SQL의 고유 식별자로 변환하는 또 다른 (효율적인) 방법이 있습니까? -.Net 코드에서하고 싶지 않습니다.



답변

DECLARE @uuid VARCHAR(50)
SET @uuid = 'a89b1acd95016ae6b9c8aabb07da2010'
SELECT  CAST(
        SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' +
        SUBSTRING(@uuid, 17, 4) + '-' + SUBSTRING(@uuid, 21, 12)
        AS UNIQUEIDENTIFIER)


답변

편리한 기능이 될 것입니다. 또한 SUBSTRING 대신 STUFF를 사용하고 있습니다.

create function str2uniq(@s varchar(50)) returns uniqueidentifier as begin
    -- just in case it came in with 0x prefix or dashes...
    set @s = replace(replace(@s,'0x',''),'-','')
    -- inject dashes in the right places
    set @s = stuff(stuff(stuff(stuff(@s,21,0,'-'),17,0,'-'),13,0,'-'),9,0,'-')
    return cast(@s as uniqueidentifier)
end


답변

귀하의 varchar col C :

SELECT CONVERT(uniqueidentifier,LEFT(C, 8)
                                + '-' +RIGHT(LEFT(C, 12), 4)
                                + '-' +RIGHT(LEFT(C, 16), 4)
                                + '-' +RIGHT(LEFT(C, 20), 4)
                                + '-' +RIGHT(C, 12))


답변

SELECT CONVERT(uniqueidentifier,STUFF(STUFF(STUFF(STUFF('B33D42A3AC5A4D4C81DD72F3D5C49025',9,0,'-'),14,0,'-'),19,0,'-'),24,0,'-'))


답변

문자열에 특수 문자가 포함되어 있으면 md5로 해시 한 다음 guid / uniqueidentifier로 변환 할 수 있습니다.

SELECT CONVERT(UNIQUEIDENTIFIER, HASHBYTES('MD5','~öü߀a89b1acd95016ae6b9c8aabb07da2010'))


답변

제공된 GUID가 올바른 형식 (.net 제공 GUID)이 아닙니다.

begin try
select convert(uniqueidentifier,'a89b1acd95016ae6b9c8aabb07da2010')
end try
begin catch
print '1'
end catch


답변