SQL 嵌套替换

dop*_*ner 5 sql sql-server

我有一个复杂的嵌套替换,我用它来连接 MSSQL 中的两个表。

select * from A
  left outer join 
select * from B
on
  replace(
     replace(
        replace(
           replace(
              replace(A.Column1, '1114', ''),
             '1160', ''), 
          '1162', ''),
        '1167', ''),
      '1176', ''),
    '1177', '')  = B.Column1
Run Code Online (Sandbox Code Playgroud)

我这样做的全部原因是因为 Table1 中的数据包含一些噪音- 数字,如11601162等,而 Table2 是干净的字符。

Eg. - Table 1 - 'HELLO1160WORLD'
      Table 2 - 'HELLOWORLD'
Run Code Online (Sandbox Code Playgroud)

现在,在我的情况下,我应该能够将它们作为一个条目进行匹配。

我目前的嵌套替换方法确实有效,但我不相信这是一种优雅的方法。任何帮助都感激不尽。谢谢

usr*_*usr 4

问题是 T-SQL 不容易允许用名称标记表达式,以便您可以从不同的位置引用它们。不过有一种方法可以做到这一点:

select replaceN
from T
cross apply (select replace1 = replace(T.col, 'x', 'y')) r1
cross apply (select replace2 = replace(replace1, 'x', 'y')) r2
cross apply (select replace3 = replace(replace2, 'x', 'y')) r3
...
Run Code Online (Sandbox Code Playgroud)

这至少摆脱了疯狂的嵌套。它没有负面的性能影响。