请问16进制数,如何去0X,再insert到一个varchar(8)字段中,总是乱码

xujie7194 2013-02-05 10:40:18
TBL_A表中有 字段A_IC_NUM(varchar10)数值为153505228,需要将该字段,insert到TBL_B表的B_IC_NUM(varchar8)
通过以下语句
INSERT INTO TBL_B (B_IC_NUM)
SELECT CAST(CONVERT(BIGINT,A_IC_NUM)AS VARBINARY(4)) FROM TBL_A
总是乱码,请问怎么解决

153505228 通过 CAST(CONVERT(BIGINT,IC_NUM)AS VARBINARY(4)) 转换 得到的值为 0x09264DCC,请问如何将这个值insert到TBL_B中B_IC_NUM(VARCHAR8),得到09264DCC这样的16进制物理卡号呢?
...全文
364 14 点赞 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xujie7194 2013-02-05
引用 9 楼 chuifengde 的回复:
SQL code?123456789系统函数:SELECT MASTER.dbo.fn_varbintohexsubstring(0,0x09264DCC,1,0) --result/*------------------------------09264dcc (所影响的行数为 1 行)*/
SELECT MASTER.dbo.fn_varbintohexsubstring(0,A_IC_NUM,1,0) 这样好像不行啊
  • 打赏
  • 举报
回复
chuifengde 2013-02-05
系统函数:
SELECT MASTER.dbo.fn_varbintohexsubstring(0,0x09264DCC,1,0)

--result
/*------------------------------
09264dcc

(所影响的行数为 1 行)
*/
  • 打赏
  • 举报
回复
szm341 2013-02-05
把你的列的转换最终varbinary形式写入参数,会根据每行值进行转换的 select dbo.ufn_vbintohexstr(CAST(CONVERT(BIGINT,A_IC_NUM)AS VARBINARY(4))) from tb
  • 打赏
  • 举报
回复
xujie7194 2013-02-05
引用 2 楼 szm341 的回复:
SQL code?12345678910111213141516171819202122232425262728293031--十六进制转换字符串create function [dbo].[ufn_vbintohexstr](@binvalue varbinary(255))returns varchar(514) ASbegin DECLARE @charval……
大牛,你这个函数的确可以,但是我想把A表的A_IC_NUM 所有行都转换,如何操作呢?
  • 打赏
  • 举报
回复
http://blog.csdn.net/wufeng4552/article/details/5008821 看这个!
  • 打赏
  • 举报
回复
xujie7194 2013-02-05
引用 4 楼 sc273607742 的回复:
引用 3 楼 xujie7194 的回复:引用 1 楼 sc273607742 的回复: right(IC_NUM,len(IC_NUM)-2) 这方法试过了都是乱码 right(CAST(CONVERT(BIGINT,IC_NUM)AS VARBINARY(4)) ,len(CAST(CONVERT(BIGINT,IC_NUM)AS VARBINARY(4))……
就是像你这样操作的,都是乱码
  • 打赏
  • 举报
回复
引用 3 楼 xujie7194 的回复:
引用 1 楼 sc273607742 的回复: right(IC_NUM,len(IC_NUM)-2) 这方法试过了都是乱码
right(CAST(CONVERT(BIGINT,IC_NUM)AS VARBINARY(4)) ,len(CAST(CONVERT(BIGINT,IC_NUM)AS VARBINARY(4)))-2) 好像有点麻烦,就是取你的结果的后几位
  • 打赏
  • 举报
回复
xujie7194 2013-02-05
引用 1 楼 sc273607742 的回复:
right(IC_NUM,len(IC_NUM)-2)

这方法试过了都是乱码
  • 打赏
  • 举报
回复
szm341 2013-02-05

--十六进制转换字符串
create function [dbo].[ufn_vbintohexstr](@binvalue varbinary(255))
returns varchar(514) 
AS
begin
	DECLARE @charvalue varchar(255)
	DECLARE @i int
	DECLARE @length int
	DECLARE @hexstring char(16)

	SELECT @charvalue = ''
	SELECT @i = 1
	SELECT @length = DATALENGTH(@binvalue)
	SELECT @hexstring = '0123456789ABCDEF'

	WHILE (@i <= @length)
	BEGIN
			DECLARE @tempint int
			DECLARE @firstint int
			DECLARE @secondint int

			SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
			SELECT @firstint = FLOOR(@tempint/16)
			SELECT @secondint = @tempint - (@firstint*16)
			SELECT @charvalue = @charvalue +
			SUBSTRING(@hexstring, @firstint+1, 1) +
			SUBSTRING(@hexstring, @secondint+1, 1)
			SELECT @i = @i + 1
	END
	return @charvalue
end

  • 打赏
  • 举报
回复
right(IC_NUM,len(IC_NUM)-2)
  • 打赏
  • 举报
回复
szm341 2013-02-05
两种选择,一种插入的时候就把外键值引入,一种是将不符合外键值的值置为null
  • 打赏
  • 举报
回复
xujie7194 2013-02-05
引用 9 楼 chuifengde 的回复:
SQL code?123456789系统函数:SELECT MASTER.dbo.fn_varbintohexsubstring(0,0x09264DCC,1,0) --result/*------------------------------09264dcc (所影响的行数为 1 行)*/
多谢,这个
引用 8 楼 szm341 的回复:
把你的列的转换最终varbinary形式写入参数,会根据每行值进行转换的 select dbo.ufn_vbintohexstr(CAST(CONVERT(BIGINT,A_IC_NUM)AS VARBINARY(4))) from tb
谢谢,实现了我要的结果,insert也是正确的值。 但是因为TBL_B表有外键,insert之前,我将外键drop了,insert B表后,无法给B表,将原来的外键添加进去。求怎么解决。
  • 打赏
  • 举报
回复
chuifengde 2013-02-05
引用 10 楼 xujie7194 的回复:
引用 9 楼 chuifengde 的回复:SQL code?123456789系统函数:SELECT MASTER.dbo.fn_varbintohexsubstring(0,0x09264DCC,1,0) --result/*------------------------------09264dcc (所影响的行数为 1 行)*/ SELECT MASTE……
sql2000
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2013-02-05 10:40
社区公告
暂无公告