NVARCHAR TO UNIQUEIDENTIFIER转换

时间:2013-09-22 16:33:40

标签: sql sql-server casting

我需要将数据从一个SQL表复制到另一个需要进行此转换的表中, 我尝试了以下方法:

SELECT TOP 10 CAST(Per_ID as UniqueIdentifier FROM Test

SELECT TOP 10 CONVERT(UniqueIdentifier,Per_ID,100) FROM Test

两个都给我这个错误:

  

从字符string转换为uniqueidentifier时转换失败。

3 个答案:

答案 0 :(得分:0)

Uniqueindentifier只能包含HEX值,它表示A-F和0-9。

答案 1 :(得分:0)

您可以为此转换创建用户定义的函数(假设正在使用MS SQL Server):

IF OBJECT_ID (N'dbo.NvarcharToUniqueidentifier', N'FN') IS NOT NULL
    DROP FUNCTION dbo.NvarcharToUniqueidentifier;
GO
CREATE FUNCTION dbo.NvarcharToUniqueidentifier (@id nvarchar(100))
RETURNS UNIQUEIDENTIFIER
WITH EXECUTE AS CALLER
AS
BEGIN
RETURN CAST(LEFT(@id, 8)
            + '-' +RIGHT(LEFT(@id, 12), 4)
            + '-' +RIGHT(LEFT(@id, 16), 4)
            + '-' +RIGHT(LEFT(@id, 20), 4)
            + '-' +RIGHT(@id, 12) 
            AS UNIQUEIDENTIFIER);
END
GO

您可以按以下方式调用此功能:

select dbo.NvarcharToUniqueidentifier('1915DE0055FA11D6A6E40008C7D0BAB1')

输出为:1915DE00-55FA-11D6-A6E4-0008C7D0BAB1

答案 2 :(得分:0)

您可以使用此脚本将varchar转换为GUID

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