Sql 当一个字符不在某个其他字符旁边时,将一个字符替换为另一个字符

Sql 当一个字符不在某个其他字符旁边时,将一个字符替换为另一个字符,sql,sql-server,tsql,ssms,Sql,Sql Server,Tsql,Ssms,我知道如何在带有循环和if语句的代码中做到这一点,但我不知道如何在tsql中做到这一点 注意,当我说CR和LF时,我指的是char(13)和char(10) 基本上,我想找到所有带有CR的东西,然后用CRLF替换它。 Hoever,它比这稍微复杂一点,因为如果我击中了CRLF,我不希望结果是CRLF。 我希望替换列中的所有实例,而不仅仅是第一个实例。任何关于tsql方法的想法都会很好 一个可怕的黑客攻击是,使用CRLF替换任何CR,从而产生一些CRCRLF,然后运行第二次更新,以CRLF替换任何

我知道如何在带有循环和if语句的代码中做到这一点,但我不知道如何在tsql中做到这一点

注意,当我说CR和LF时,我指的是char(13)和char(10)

基本上,我想找到所有带有CR的东西,然后用CRLF替换它。 Hoever,它比这稍微复杂一点,因为如果我击中了CRLF,我不希望结果是CRLF。 我希望替换列中的所有实例,而不仅仅是第一个实例。任何关于tsql方法的想法都会很好


一个可怕的黑客攻击是,使用CRLF替换任何CR,从而产生一些CRCRLF,然后运行第二次更新,以CRLF替换任何CRLF,但这不是最好的方法,不是吗?

好的,一种方法是使用CR替换当前的CRLF实例,然后进行替换:

with chars as (
      select char(10) as lf, char(13) as cr
     )
update t
    set col = replace(replace(col, cr + lf, cr), cr, cr + lf)
    from t cross join
         chars;

整个事情将是很好的,只是为了确保我语法正确,但我可能会使我自己的更新。我没有按照你的建议去想两次传球有什么可怕的?你换了cr和lf。lf是chr(10)和cr是chr(13)@adam kim:如果你可以使用SQLCLR,你可以使用具有负lookback的正则表达式。这将留下一个单独的lf未修改,我将替换(替换(替换(col,crlf,lf),cr,lf,crlf)@hetOrakel。这是一个合理的建议。然而,这个问题明确地说:“基本上,我想用一个CR找到所有东西,并用一个CRLF替换它”。你是对的,但是。。。1) 他交换了cr和lf(见我的评论),2)他希望有一个cr。我不知道最近有任何操作系统使用一个cr。现在是CRLF(x0Dx0A/13+10)或lf(x0A/10)。即使是苹果(OSX)现在也在使用LF(x0A/10)。所以我怀疑他问的是他真正想要的;)。但只有一个人能回答这个问题;)@GordonLinoff我正在从foxpro数据库迁移,所以有很多CR需要替换。2其他事项:。。。1.请编辑您的答案,将字符(13)设置为cr,字符(10)设置为Lf,好吗?当我写问题时,我显然忽略了ancii正确的代码;我不想有人被误导。。。2.为什么下面的语法没有改变,但是你的语法起作用了?更新表1设置列1=replace(列1,字符(13),字符(13)+字符(10))