数据库里面有一列是postbody保存 含html样式的字符串,现在想将里面的'<p>空格' 替换成'<p>' 
曾试过以下方法来替换输出的东西还是没有被替换,不知道那些空格是什么来的
declare @postbody nvarchar(max)
set @postbody=(select  PostBody from Flog_Posts where PostID=16645)
select @postbody  ---原先
select REPLACE(@postbody,'<p> ','<p>') --经过处理,但是还是没有除掉空格postbody的列的内容类似下面的格式,有html的样式的
'<p> </p><p>    北京时间6月9日消息 罗恩-阿泰斯特本赛季结束后将成为自由球员,他是火箭队的头号续约目标,不过休斯顿现在又增加了两个来自欧洲的竞争对手。据《选秀快报》报道,希腊联赛两巨头奥林匹亚科斯队和帕纳辛奈科斯队都对阿泰很有兴趣。</p><p> </p><p style="text-align: center"><img id=":_4106" alt="暂无图片" src="http://tm.tiwang.com/Image/normal.gif" />   </p><p> </p><p>    《选秀快报》的乔纳森-吉沃尼目前正在意大利考察欧洲训练营,因此他有机会搜罗到欧洲篮坛的最新情报。据吉沃尼称,希腊篮坛的两支劲旅都对阿泰斯特很感兴趣,其中奥林匹亚科斯队已经在去年夏天从NBA老鹰队挖来了“爆炸头”约什-柴德里斯,帕纳辛奈科斯队中则有火箭旧将瓦西里斯-斯潘诺里斯。</p><p> </p><p>    两支球队都表示,如果阿泰斯特在NBA找不到更好的合同,就可以考虑与他们签约,不过两队具体会给阿泰斯特开出多少年薪并没有曝光。</p><p> </p><p>    柴德里斯在老鹰队的最后一个赛季薪水约为500万美元,但他还需要缴纳不菲的个人所得税。而他现在不但拿着奥林匹亚科斯队开出的600万欧元税后纯年薪,还享受着别墅、汽车、厨师、女佣等球队配套服务。在NBA,柴德里斯最多拿到中产合同。但在希腊,他获得的是大牌巨星的待遇。</p><p> </p><p>    奥林匹亚科斯队去年10月还有过更惊人的计划,当时这支球队的老板声称,只要科比-布莱恩特愿意来希腊,他肯出3000万美元的税后年薪,再加上各种豪华配套服务,包括私人海景别墅。</p><p> </p><p>    不过《篮筐世界》的专家杰森-弗莱明不认为阿泰斯特会前往欧洲。弗莱明表示,即便阿泰现在没有完全关闭出走希腊的大门,他也不太可能离开NBA。首先,火箭队非常愿意与阿泰续约,并报出了4年3700万美元的合同。退一步考虑,如果阿泰不与火箭续约,那也会有其他NBA球队提供给他中产以上的合同。尽管阿泰斯特是一个不容易预测的人,但钱摆在那里,所以阿泰还是会留在NBA。</p><p> </p>'

解决方案 »

  1.   

    看看空格的ASCII是什么?然后再替换。
      

  2.   

    Create function dbo.regexReplace
    (
    @source varchar(5000),    --原字符串
    @regexp varchar(1000),    --正则表达式
    @replace varchar(1000),   --替换值
    @globalReplace bit = 0,   --是否是全局替换
    @ignoreCase bit = 0       --是否忽略大小写
    )
    returnS varchar(1000) 
    AS
    begin
    declare @hr integer
    declare @objRegExp integer
    declare @result varchar(5000) exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
    IF @hr <> 0 
    begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end
    exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
    IF @hr <> 0 
    begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end
    exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
    IF @hr <> 0 
    begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end
    exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
    IF @hr <> 0 
    begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end 
    exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
    IF @hr <> 0 
    begin
    exec @hr = sp_OADestroy @objRegExp
    return null
    end
    exec @hr = sp_OADestroy @objRegExp
    IF @hr <> 0 
    begin
    return null
    end return @result
    end -------------------------------------------------------------
    1.替换【空格<p>多个空格】为【空格<p>】
        declare @str varchar(100)
        set @str=' <p>  </p> <p>    xyz123z5</p>'
        select comeoput=dbo.regexReplace(@str,' <p> +',' <p>',1,1) comeoput
    -------------------------
     <p></p> <p>xyz123z5</p>2.【空格<p>空格】为【空格<p>】
        declare @str varchar(100)
        set @str=' <p>  </p> <p>    xyz123z5</p>'
        select comeoput=dbo.regexReplace(@str,' <p> ',' <p>',1,1) comeoput
    -------------------------------
     <p> </p> <p>   xyz123z5</p>
      

  3.   

    另外还可以先将'空格'转换为&nbsp;然后再处理。
    SELECT Replace(@postbody,' ','&nbsp;')
      

  4.   


    select isnull(字段,值)
      

  5.   

    --1
    SELECT Replace(@postbody,'要换的字符')
    --2
    select isnull(字段,要换的值)