zoukankan      html  css  js  c++  java
  • 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码和字符补位的问题

  • 相关阅读:
    什么是 CLR
    常用的数据结构以及算法
    Array和ArrayList的异同点
    什么是CMS?
    .NET Framework3.0答疑
    C#中的委托
    C#速成之三(Quick C#)
    C#速成之五(Quick C#)
    C#速成之四(Quick C#)
    类,对象,封装,接口,多态,继承
  • 原文地址:https://www.cnblogs.com/sunzgod/p/10423123.html
Copyright © 2011-2022 走看看