[英]Convert varchar to uniqueidentifier in SQL Server
我無法控制其架構的表包含定義為 varchar(50) 的列,該列以“a89b1acd95016ae6b9c8aabb07da2010”(無連字符)格式存儲唯一標識符
我想將這些轉換為 SQL 中的唯一標識符以傳遞給 .Net Guid。 但是,以下查詢行對我不起作用:
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 中的唯一標識符。 -- 我不想在.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)
這將是一個方便的功能。 另外,請注意我使用的是 STUFF 而不是 SUBSTRING。
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,'-'))
選擇演員表(CAST('A89B1ACD-9501-6AE6-B9C8-AABB07DA2010' as char(36)) 作為唯一標識符)
如果您的字符串包含特殊字符,則可以將其哈希到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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.