将UniqueIdentifier转换为十六进制字符串

问题描述

我的表有一个二进制GGUID字段。此字段的十六进制值为0x222134A61766432BAC3CA2D8C8058751

在nifi Executesql中,二进制字段存储在字节数组中

{
  "GGUID" : [ 34,33,52,-90,23,102,67,43,-84,60,-94,-40,-56,5,-121,81 ]
}

我发现了很多用于GGUI的CAST和CONVERT函数

SELECT 
  CONVERT(nvarchar(36),GGUID) AS nGuid,CONVERT(bigint,GGUID) AS iGuid,CONVERT(UNIQUEIDENTIFIER,GGUID) AS uGuid,CONVERT(binary(16),GGUID) AS bGuid,CAST(GGUID AS VARCHAR(36)) AS vGuid,GGUID
FROM [dbo].[ADDRESS0] 

但其中没有一个返回十六进制字符串。

SSMS中的结果(SSMS以十六进制格式显示二进制数据):

result in SSMS

问题:

您现在是否具有将二进制字段转换为十六进制字符串的函数/广播/转换?

P.S .:是的:我有一个解决方案:在脚本中自行构建十六进制字符串

解决方法

您可能正在寻找CONVERT() function

您可以在单个语句中完成此操作,但可以将uniqueidentifier转换为varbinary值,然后如果需要0x则使用样式1将其转换为varchar,如果不希望使用前缀,则将其转换为样式2,例如:

declare @uGuid uniqueidentifier = 'A6342122-6617-2B43-AC3C-A2D8C8058751';
declare @varbinary varbinary(16) = cast(@uGuid as varbinary(16));

select
  @uGuid,-- A6342122-6617-2B43-AC3C-A2D8C8058751
  @varbinary,-- 0x222134A61766432BAC3CA2D8C8058751
  convert(varchar(50),@varbinary,1),-- '0x222134A61766432BAC3CA2D8C8058751'
  convert(varchar(50),2) -- '222134A61766432BAC3CA2D8C8058751'