sqlserver 截取中文 中文标点算两个字符 差位空格补齐

IF OBJECT_ID('f_cut') IS NOT NULL DROP FUNCTION f_cut
GO
CREATE FUNCTION [dbo].[f_cut]
(
@s NVARCHAR(500),--你要截取的字符串
@i INT--截取的长度
)
RETURNS NVARCHAR(500)
AS
BEGIN
DECLARE @j INT
DECLARE @cnChart varchar(1000)
declare @m int
declare @cutLength int
declare @result varchar(500)
set @cnChart=',12290,65311,65281,65292,12289,65307,65306,12300,12301,12302,12303,8216,8217,8220,8221,65288,65289,12308,12309,12304,12305,8212,8230,8211,65294,12298,12299,12297,12296,' 
SET @j=1
set @m=0
set @cutLength=@i
WHILE @j<=@i
BEGIN
IF UNICODE(SUBSTRING(@s,@j,1)) BETWEEN 19968 AND 40868 or CHARINDEX(convert(varchar,UNICODE(SUBSTRING(@s,@j,1))),@cnChart)>0
BEGIN 
SET @i=@i-1
set @m+=2
END
else 
begin
set @m+=1
end
SET @j=@j+1
END 

if @m>@cutLength
begin
set @result= LEFT(@s,@i)+' '
end
else 
begin
set @result= LEFT(@s,@i)
END
return @result
end

GO

  主要就是中文标点的unicode码和字符补位的问题

posted @ 2019-02-23 16:29  CalabashSun  阅读(560)  评论(0编辑  收藏  举报