declare @str varchar(10) set @str='abc中' while datalength(@str)>0 begin print ascii(@str) set @str=stuff(@str,1,1,'') end--结果 /* 97 98 99 214 */
--自己写用户定义函数 create function f_Char2Binary(@str varchar(8000)) returns varchar(8000) AS BEGIN DECLARE @r varbinary(8000),@i int,@j int select @r=cast(@str as varbinary(8000)),@i=datalength(@r),@str='' while @i>0 begin select @j=substring(@r,@i,1), @str=substring('0123456789ABCDEF',@j/16+1,1) +substring('0123456789ABCDEF',@j%16+1,1) +@str, @i=@i-1 end return(@str) end go--调用用户定义函数 select dbo.f_Char2Binary(field)
用户定义函数执行的返回是一个字符串,每两个字节代表原数据中一个字节的ASCII码。
楼上的方法不错。可以得到整个的ascii码值。
不知道你说得是不是这个意思 ? select unicode(field) from table1 where datalength(field)=5
set @str='abc中'
while datalength(@str)>0
begin
print ascii(@str)
set @str=stuff(@str,1,1,'')
end--结果
/*
97
98
99
214
*/
create function f_Char2Binary(@str varchar(8000))
returns varchar(8000)
AS
BEGIN
DECLARE @r varbinary(8000),@i int,@j int
select @r=cast(@str as varbinary(8000)),@i=datalength(@r),@str=''
while @i>0
begin
select @j=substring(@r,@i,1),
@str=substring('0123456789ABCDEF',@j/16+1,1)
+substring('0123456789ABCDEF',@j%16+1,1)
+@str,
@i=@i-1
end
return(@str)
end
go--调用用户定义函数
select dbo.f_Char2Binary(field)
select unicode(field) from table1 where datalength(field)=5
汉字保存是2个字节,不是ASCII码,SQL不知怎取,可以用C#等高级语言在程序中取得unicodeUP
select com_name,cast(com_name as varbinary(8000)) from device.com_info
结果集:
常州 0xB3A3D6DD00后面居然有个0x00!!!replace(com_name,char(0x00),'')把整个字段清空了,因为select charindex(char(0x00,com_name)) 返回的是1这个00如何去掉?
因此可以直接判断字段最后一个字符的ASCII码值是否 0,从而决定如何更新该列的值:
----------------------------------------------------------------------------
update
device.com_info
set
name = left(name,len(name)-1)
where
ascii(right(name,1)) = 0
常林股份有限公司 0xB3A3C1D6B9C9B7DDD3D0CFDEB9ABCBBE
常州矿山机械厂 0xB3A3D6DDBFF3C9BDBBFAD0B5B3A7
常州 0xB3A3D6DD00
常州铆焊厂 0xB3A3D6DDC3ADBAB8B3A7
常州.长岭 0xB3A3D6DD2EB3A4C1EB
常州起重机厂 0xB3A3D6DDC6F0D6D8BBFAB3A7这个00是如何产生的?