由于导入或者字符集甚至其他原因,导致表中某些字段的值有半个汉字的情况出现。需要处理,所以写如下过程实现(具体的分析网文有,可以很方便的google到)。
处理原理:就是按照一个字符串的char_length来分别截取每个字符,然后转换为varbinary,看第一个字节和第二个字节的取值,如果第一个字节的取值小于127,说明是字母或者数字,如果大于127,则看第二个字节,如果等于0则说明是半个字符。
demo说明:我这个过程只是处理最后一个字符,因为我需要处理的情况就是末尾有半个汉字,如果是中间也有,就按照上述处理原理逐个处理,发现是半个的,就舍弃,然后拼装起来即可。
[@more@]-----截取半个汉字if exists (select * from sysobjects where id = object_id('dbo.up_truncsemihanzi'))
drop procedure dbo.up_truncsemihanzi
go
create procedure up_truncsemihanzi
@i_str varchar(800), ------传入字符串
@o_str varchar(800) output ------传出字符串
as
declare @strlen int, ---字符串长度
@lastchar char(1), ----最后一个字符
@tempint1 int, ---最后一个字符的第一个字节的值
@tempint2 int ---最后一个字符的第二个字节的值
begin
select @strlen=char_length(@i_str)
select @o_str =substring(@i_str,1,@strlen-1),
@lastchar=substring(@i_str,@strlen,1)
select @tempint1=convert(int,substring(convert(varbinary,@lastchar),1,1)),
@tempint2=convert(int,substring(convert(varbinary,@lastchar),2,1))
if @tempint1>127
begin
if @tempint2>0
select @o_str=@i_str
end
else
select @o_str=@i_str
end ----up_truncsemihanzi
go
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/47869/viewspace-909670/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/47869/viewspace-909670/