복붙노트

[SQL] SQL Server의 고유 식별자에 VARCHAR로 변환

SQL

SQL Server의 고유 식별자에 VARCHAR로 변환

I는 스키마의 여부를 제어 할 수없는 테이블 VARCHAR (50)의 형식 'a89b1acd95016ae6b9c8aabb07da2010'에 저장되는 uniqueidentifiers (하이픈 없음)로 정의 된 열에 포함

나는 닷넷의 GUID를 전달하는 SQL에 uniqueidentifiers 이러한 변환하고자합니다. 그러나 다음 쿼리 라인은 나를 위해 작동하지 않습니다

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

과의 결과 :

Msg 8169, Level 16, State 2, Line 1
Conversion failed when converting from a character string to uniqueidentifier.

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

SQL에서 uniqueidentifiers 이러한 문자열을 변환하는 또 다른 (효율적인) 방법이있다. - 나는 닷넷 코드에서하고 싶지 않아.

해결법

  1. ==============================

    1.

    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)
    
  2. ==============================

    2.그것은 편리한 기능을 위해 만들 것입니다. 또한, 내가 대신 문자열의 다도를 사용하고 있습니다.

    그것은 편리한 기능을 위해 만들 것입니다. 또한, 내가 대신 문자열의 다도를 사용하고 있습니다.

    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
    
  3. ==============================

    3.당신의 VARCHAR의 COL의 C :

    당신의 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))
    
  4. ==============================

    4.

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

    5.당신의 문자열에 특수 문자가 포함 된 경우는 MD5로 해시 다음 GUID / 고유 식별자로 변환 할 수 있습니다.

    당신의 문자열에 특수 문자가 포함 된 경우는 MD5로 해시 다음 GUID / 고유 식별자로 변환 할 수 있습니다.

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

    6.제공된 GUID는 올바른 형식 (.NET GUID 제공) 아니다.

    제공된 GUID는 올바른 형식 (.NET GUID 제공) 아니다.

    begin try
    select convert(uniqueidentifier,'a89b1acd95016ae6b9c8aabb07da2010')
    end try
    begin catch
    print '1'
    end catch
    
  7. from https://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server by cc-by-sa and MIT license