ls_string = ABS塑胶粒172BAGSPC塑胶粒52BAGSPC/ABS塑胶粒60BAGSPMMA塑胶粒12BAGSPOM塑
以上一排字符串,当我用leftW(ls_string,100)时,然后用messagebox测试,弹出
ABS塑胶粒172BAGSPC塑胶粒52BAGSPC/ABS塑胶粒60BAGSPMMA塑胶粒12BAGSPOM塑?,请问这是怎么回事,后面给加了一个问号,如果直接截取,会出现汉字截取不对的问题,如何解决,在线等
------解决方案--------------------
可以判断最后一个字符是否半个汉字。
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
create function fn_TruncSemiHanzi(@str varchar(4000))
returns varchar(8000)
as
begin
declare @sTmp varchar(8000),
@i int,
@itmp int,
@itmp2 int ,
@stmp2 varchar(2)
select @sTmp= ' '
select @i = 1
while @i <= len(@str)-1
begin
select @itmp=convert(int,substring(convert(varbinary,substring(@str ,@i,1)),1,1)) --截取一个字节
if @itmp> 127
begin
--大于127检查后面一个字节
select @itmp2=convert(int,substring(convert(varbinary,substring(@str ,@i,2)),2,1))
if @itmp2> 127
begin
select @stmp2=char(@itmp)+char(@itmp2) --是一个完整的汉字
select @i = @i + 2
end
else
begin
select @stmp2=char(@itmp2) --丢弃半个汉字
select @i = @i + 1
end
end
else
begin
select @sTmp2=char(@itmp)
select @i = @i + 1
end
select @[email protected][email protected]
end
return @stmp
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO