最近老遇到一些问题,LTRIM,RTRIM 只能去掉开头的空格,但是一些非打印字符就不行了,有木有办法都去掉呢?Replace不行,Replace把所有的都给去掉了,写个过程又感觉有点太麻烦了,不知道大家有没有遇到过呢?

解决方案 »

  1.   

    什么是非打印字符
    ltrim去左侧空格
    rtrim去右侧空格
      

  2.   

    非打印字符?replace(字段,char(9),'')?
      

  3.   

    declare @str varchar(50)
    SELECT @STR=' !#$@%$#^%ABC123'
    SELECT @STR,STUFF(@STR,1,PATINDEX('%[0-9A-Za-z.]%',@STR)-1,'')你指定合法字符,然后这样去前缀到第一个合法字符代替LTRIM
      

  4.   

    char(9) 水平制表符 char(10)换行键 char(13)回车键
      

  5.   

    偷个懒,RTRIM用REVERSER处理一下。
    declare @str varchar(50)
    SELECT @STR=' !#$@%$#^%ABC123*&^
    !#@%$#  
    )( '
    SELECT @STR,STUFF(@STR,1,PATINDEX('%[0-9A-Za-z.]%',@STR)-1,'')
    ,REVERSE(STUFF(REVERSE(@STR),1,PATINDEX('%[0-9A-Za-z.]%',REVERSE(@STR))-1,''))
      

  6.   

    用REPLACE的话可能会把内容中间的字符去掉。
      

  7.   

    如下例:create table #tb
    (
    strs varchar(50)
    )insert into #tb values ('500ml*1' )  
    insert into #tb values ('10g*10' ) 
    insert into #tb values ('0.5DF:ASD*10' ) 
    insert into #tb values ('10JSH*10*10')select * from #tbselect SUBSTRING(strs,1,CHARINDEX('*',strs)-1) from #tb
    --------------------------------------------------
    500ml
    10g
    0.5DF:ASD
    10JSH(4 行受影响)
    方法二select LEFT(strs,CHARINDEX('*',strs)-1) from #tb
    --------------------------------------------------
    500ml
    10g
    0.5DF:ASD
    10JSH(4 行受影响)方法三
    select REPLACE(strs,right(strs,len(strs)-CHARINDEX('*',strs)+1),'') from #tb
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    500ml
    10g
    0.5DF:ASD
    10JSH(4 行受影响)
    方法四create function getabovestar
    (@gg nvarchar(20))
    returns nvarchar(20)
    as
    begin
    return (case when charindex('*',@gg)>0 then left(@gg,charindex('*',@gg)-1) else @gg end)
    end
    go
    select dbo.getabovestar(gg) from #tb
      

  8.   

    原来SQL也支持正则啊....
    难道非打印字符不是\s吗?难道我今天刚看的正则教程又忘了?
    ...
    再回去看看...
    哦!
    \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ (空格)\f\n\r\t\v]。那你就将[\f\n\r\t\v]*替换为空啊
      

  9.   


    理论上,从nchar(0)到nchar(65535)范围内,不能正常显示出字符的东东,都叫非打印字符.
      

  10.   

    非打印字符好处理,直接Replace就行,不过我要的是把开头和结尾的去掉,因为LTrim,Ttrim是去不掉的。