当不在某个其他字符旁边时用另一个字符替换一个字符

replacing one character with another when not next to a certain other character

我知道如何在带有循环和 if 语句的代码中执行此操作,但我不确定如何在 tsql 中执行此操作。

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

基本上我想找到带有 CR 的所有内容并将其替换为 CRLF。 然而,它比这稍微复杂一些,因为如果我遇到 CRLF,我不希望结果是 CRCRLF。 我想替换列中的所有实例,而不仅仅是第一次出现的实例。任何有关执行此操作的 tsql 方式的想法都会很棒。

一个可怕的 hack 是通过并用 CRLF 替换任何 CR 导致一些 CCRRLF,然后 运行 第二次更新以用 CRLF 替换任何 CCRRLF 但这不是最好的方法是吗?

嗯,一种方法是用 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;