【问题标题】:NVARCHAR TO UNIQUEIDENTIFIER Conversion [duplicate]NVARCHAR 到 UNIQUEIDENTIFIER 转换 [重复]
【发布时间】:2013-09-27 13:46:19
【问题描述】:

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

SELECT TOP 10 CAST(Per_ID as UniqueIdentifier FROM Test

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

两个都给我这个错误:

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

【问题讨论】:

  • 你能显示一些 Per_ID 数据吗?
  • Per_ID 1915DE0055FA11D6A6E40008C7D0BAB1

标签: sql sql-server casting


【解决方案1】:

您可以使用此脚本将 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)

【讨论】:

    【解决方案2】:

    您可以为此转换创建一个用户定义的函数(假设正在使用 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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • Per_ID 1915DE0055FA11D6A6E40008C7D0BAB1(此 ID 具有 HEX 值)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多