SQL Server中varbinary与varchar之间的相互转换

前言

  作为一个大三玩完儿即将进入大四的‘学长’来说,大三读完了,大家也差不多快到‘分道扬镳’的时候了(其实早就不想在学校继续读书了),这个时候如果你不考研的话,找工作,最重要的是找个实习应该是当务之急的事情了吧。但是问题就来了,作为一个半吊子(例如我)来说,找一个靠谱的实习单位绝对是一件让人痛苦的事情,整天在各大招聘网站上面逛来逛去,大家实习单位在暑假前就已经找好了,这时候招聘信息已经不多了,所以供我们选择的余地也已经少只有少。
   不过我可能是那其中比较幸运的一只吧,我在一家算不上很大的公司里面找到了一个数据库的实习生岗位,这其中也谈不上经验,大概就只有些许的运气还有我学过一点c#而已了。尽管如此,找准自己的专业方向(虽然我没有面上c#开发)并且做好必要的准备工作是非常重要的,另外尽量使自己接触的东西多一些,例如如果你是计算机方向的话,大学的时候大部分人并不需要把语言掌握的非常牛逼,但是如果你都接触过一些,例如c,c++,c#,java,html之类的语言,并且算法相关的知识,数据库,操作系统什么的你都能够说上来一两点的话,这样面试也就不至于让自己太过于尴尬了。

正文

  由于我现在主要是做数据库了,因此以后接触更多的是SQL Server方面的东西。这篇博客主要讲的是SQL Server中的 varchar和varbinay之间相互转换的问题,二进制数据在SQL Server中是作为十六进制显示的,那么这个问题举个栗子就是给你一个例如‘0x12abcd’这样的字符串或者十六进制数据,你要将它转换为‘0x12abcd’对应的十六进制数据或者是字符串,这个问题咋看上去很简单,但做起来是有些难度的(当然大牛除外了),因为考虑到十六进制数据在内存中的存放方式和字符串不一样,所以处理起来要费劲一些。

  接下来我介绍一种比较简单的方法,首先介绍从varchar数据转换到varbinary数据的方法,这个方法个人觉得比较巧妙,因为它用到了SQL Server中的sp_executesql的方法,它可以方便的帮我们解决眼前的问题。解决办法是这样的:

	declare @str nvarchar(1000),@a varbinary(500),@sql nvarchar(max)
	set @str=N'0x12abcd'
	set @sql=N'set @p='+@str+N';'
	exec sp_executesql   @sql,
						 N'@p as varbinary(500) output',
						 @p=@a output
	select  @a

  上面的方法不能倒过来用,不过SQL Server提供了我们一个标量函数来解决从varbinay数据到varchar的问题,用法如下:

	declare @bin varbinary(1000)
	set @bin=0x12abcd
	select sys.fn_varbintohexstr(@bin)

  完。

原文地址:https://www.cnblogs.com/au-xiaotian/p/3906477.html