Convert varchar to uniqueidentifier in SQL Server

匿名 (未验证) 提交于 2019-12-03 03:04:01

问题:

A table I have no control of the schema for, contains a column defined as varchar(50) which stores uniqueidentifiers in the format 'a89b1acd95016ae6b9c8aabb07da2010' (no hyphens)

I want to convert these to uniqueidentifiers in SQL for passing to a .Net Guid. However, the following query lines don't work for me:

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

and result in:

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

The same queries using a hyphenated uniqueidentifier work fine but the data is not stored in that format.

Is there another (efficient) way to convert these strings to uniqueidentifiers in SQL. -- I don't want to do it in the .Net code.

回答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:

It would make for a handy function. Also, note I'm using STUFF instead of 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 


回答3:

your 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:

If your string contains special characters you can hash it to md5 and then convert it to a guid/uniqueidentifier.



回答6:

you are provided guid is not correct format(.net Provided guid).

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



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!