当前位置: 首页 > 面试题库 >

SQL Server字符串到varbinary的转换

罗淮晨
2023-03-14
问题内容

好的,问题是需要在2个表上进行合并或联接。一个文件的内容存储为[image]类型或varbinary(max),另一个文件的内容存储为十六进制字符串。如果我将相同的内容上传到两个表中

内容为字符串(从bytearray到字符串)看起来像这样…

'application/vnd.xfdl;content-encoding="base64-gzip"
H4sIAAAAAAAAC+y9e1fjONI4/H9/Cg173idwFgIJl+5m6MzPJAayE+KsnXQPs8+cHJMY8HZi57ET
aObMh3918UW2Jcdyrmbg7E7HtqpUpSqVSqWSdPHLj/EIPBuOa9rWl51K+WgHGNbAHprW45edpqYc
fPp0+vmgsvNL7cPFb1eNFoDlLffLztN0Ojk/PHx5eSl3Zo4hDx+N8sAeH6Iyh2fl0x1S8Hwwc6f2'    
...

图像的内容看起来像(这最终就是我想要的样子)

0x6170706C69636174696F6E

如果我选择convert(varbinary(MAX), @contentAsString)我得到0x6100700070006C00690063006100740069006F006E

看起来转换似乎已达到目标,但在每个之间放置了两个零(00),由于缺少更好的字词,我将其称为一个字节。

我尝试过在论坛上发布的各种更复杂的方法,但都无济于事。任何帮助,将不胜感激。


问题答案:

好的,所以已填充的00已得到回答。

DECLARE @hexStringNVar nvarchar(max)
DECLARE @hexStringVAR varchar(max)

SET @hexStringNVar = '{my hex string as described above}'
SET @hexStringVAR = '{my hex string as described above}'

select CONVERT(varbinary(MAX), @hexStringNVar)) = 0x6100700070006C00690063...
select CONVERT(varbinary(MAX), @hexStringVAR)) = 0x6170706C6963...

00填充是因为Unicode或NVARCHAR而不是VARCHAR

因此,由于存储的数据位于中nvarchar(max),解决方案是这样的:

select CAST(cast(@hexStringNVar as varchar(max)) as varbinary(max)) = 0x6170706C6963...

我敢肯定,它convert也能正常工作,但我的目标SQL Server是2005。



 类似资料:
  • 我遇到了这样一个java字符串,其中以下内容是错误的: 我想这是因为字符串构造函数默认将主体字节[]的编码视为UTF-8,我不是100%确定。我如何能够将此字符串存储在字节[]中,并能够稍后将其转换回来?我想我需要能够确定字节[]的编码方式。我该怎么做呢? 一些上下文:我需要字节[],以便压缩数据,将其存储在数据库中,然后解压缩并将未压缩的字节[]转换回原始字符串。这个字符串最初来自某个下载了网页

  • 我想转换一个组织。阿帕奇。火花sql。数据框到组织。阿帕奇。火花rdd。RDD[(字符串,字符串)]在数据块中。有人能帮忙吗? 背景(也欢迎使用更好的解决方案):我有一个Kafka流,它(经过一些步骤)变成了2列数据帧。我想将其放入Redis缓存,第一列作为键,第二列作为值。 更具体地说,输入的类型是:。我尝试将以下内容放入Redis: 错误消息如下所示: 我已经尝试过一些想法(比如函数、rdd)

  • 问题内容: 嗨,我想将此BufferedInputStream放入我的字符串中,我该怎么做? 问题答案: BufferedInputStream in = new BufferedInputStream(sktClient.getInputStream()); byte[] contents = new byte[1024];

  • 在Java中,我看到了将转换为的四种选择。 我认为第一个是最慢的。第二个很方便。我推测第三个可能会返回一个先前创建的< code>String实例,但我不确定,API文档也没有这么说。这同样适用于选项四。这种实例的重用是非常幸运的,因为基于散列的查找可以利用< code>String中的< code>hashCode()缓存。(哪个特性也没有在API文档中描述,但是很多人告诉我。) 我来自C语言,

  • Golang具有strconv库,可以将字符串转换为int64和uint64。 但是,其余的整数数据类型似乎不受支持,因为我找不到byte、int16、uint16、int32、uint32数据类型的转换函数。 始终可以将字节、16位和32位数据类型转换为int64和uint64,而不会损失精度。这就是语言的意图吗?

  • 我正在制作一个Android应用程序,它可以与蓝牙设备进行通信。我正在为选定的特征写一条特定的信息,如下所示: 我的转换函数如下所示: 我试图弄清楚为什么在这种情况下,我的转换输出是这样的: D/上传数据集:消息:�������������������� 这很奇怪,因为当我使用相同的转换函数来转换作为蓝牙通知接收到的值时,它工作得非常好。欢迎提出问题所在的任何建议