[SQL] SQL Server의 고유 식별자에 VARCHAR로 변환
SQLSQL 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.
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.그것은 편리한 기능을 위해 만들 것입니다. 또한, 내가 대신 문자열의 다도를 사용하고 있습니다.
그것은 편리한 기능을 위해 만들 것입니다. 또한, 내가 대신 문자열의 다도를 사용하고 있습니다.
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.당신의 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.
SELECT CONVERT(uniqueidentifier,STUFF(STUFF(STUFF(STUFF('B33D42A3AC5A4D4C81DD72F3D5C49025',9,0,'-'),14,0,'-'),19,0,'-'),24,0,'-'))
-
==============================
5.당신의 문자열에 특수 문자가 포함 된 경우는 MD5로 해시 다음 GUID / 고유 식별자로 변환 할 수 있습니다.
당신의 문자열에 특수 문자가 포함 된 경우는 MD5로 해시 다음 GUID / 고유 식별자로 변환 할 수 있습니다.
SELECT CONVERT(UNIQUEIDENTIFIER, HASHBYTES('MD5','~öü߀a89b1acd95016ae6b9c8aabb07da2010'))
-
==============================
6.제공된 GUID는 올바른 형식 (.NET GUID 제공) 아니다.
제공된 GUID는 올바른 형식 (.NET GUID 제공) 아니다.
begin try select convert(uniqueidentifier,'a89b1acd95016ae6b9c8aabb07da2010') end try begin catch print '1' end catch
from https://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 쿼리 패턴의 구현을 찾을 수 없습니다 (0) | 2020.04.10 |
---|---|
[SQL] GUID의 SCOPE_IDENTITY ()? (0) | 2020.04.10 |
[SQL] TSQL - 정수 또는 반환 기본값 캐스트 문자열 (0) | 2020.04.10 |
[SQL] 두 소수와 다수가 SQL 서버를 배치 쓰기 (0) | 2020.04.10 |
[SQL] SQL 여러 테이블에 LINQ는 외부 조인 왼쪽 (0) | 2020.04.10 |