【问题标题】:How do you set a binary value from a string variable comprised of a binary literal in SQL Server?如何从 SQL Server 中由二进制文字组成的字符串变量设置二进制值?
【发布时间】:2019-01-15 01:35:25
【问题描述】:

我有一个表,其中有一列二进制文字转换为字符串,我需要将其与包含与 binary(16) 相同值的表相关联

根表字符串值'2F774578C33011E880D80050569C29CA'

我需要加入0x2F774578C33011E880D80050569C29CA的表值

有没有办法通过简单地将 0x 添加到字符串然后将字符串声明为二进制的文字值来将根表转换为二进制?或将二进制转换为根中包含的字符串。

我尝试了以下没有运气:

DECLARE @jobIDBinary Binary(16) 
DECLARE @jobString Nvarchar(50) 

SET @jobIDBinary = '0x'+
(SELECT TOP (1) JobId

FROM  [Record]) 

错误:不允许从数据类型 nvarchar 到二进制的隐式转换。使用 CONVERT 函数运行此查询。

我也尝试过换一种方式:

 DECLARE @convo varchar(max) 
 SET @convo = (SELECT TOP (1)
 [BinaryJobID]
 FROM [GAPClaims].[dbo].[Record2]

 WHERE binaryjobId IS NOT NULL ) 

结果 = ,]óJ¾¶‡Á§\ê€

提前谢谢。

【问题讨论】:

  • 为什么不直接使用 convert 或 cast?

标签: sql sql-server tsql


【解决方案1】:

您可以将您的 varbinary 转换为 varchar,并加入它(或关联它,如您所说)。

declare @v varbinary(16) = 0x2F774578C33011E880D80050569C29CA
select @v, convert(varchar(256), @v,2)

declare @s varchar(256) = '2F774578C33011E880D80050569C29CA'
select @s, convert(varbinary(16),@s,2)

所以,对你来说:

 DECLARE @convo varchar(max) 
 SET @convo = (SELECT TOP (1)
 convert(varchar(256),[BinaryJobID],2)
 FROM [GAPClaims].[dbo].[Record2]
 WHERE binaryjobId IS NOT NULL ) 

请参阅Binary section in the docs,了解我在convert 语句中使用2 的原因。

【讨论】:

    【解决方案2】:

    试试这个把字符串转换成二进制:

    CONVERT(BINARY(16), @jobString)
    

    和反向:

    CONVERT(VARCHAR(max), @jobBinary)
    

    【讨论】:

    • 谢谢,但是转换为 varchar(max) 仍然会将二进制中的数据转换为字符,而不是二进制列中包含的文本字符串。结果 = ,]óJ¾¶‡Á§\ê€
    • 你需要指定样式,因为0是默认值。
    • @user9776216 我只是没有抓住你想要添加二进制前缀的部分。所以这只是一般的转换示例。再次阅读您的问题后,我明白您的意思了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2018-08-30
    • 1970-01-01
    • 2012-08-27
    • 2011-07-11
    • 2012-10-05
    • 2021-11-09
    相关资源
    最近更新 更多