我有一个复杂的嵌套替换,我用它来连接 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 中的数据包含一些噪音- 数字,如1160、1162等,而 Table2 是干净的字符。
Eg. - Table 1 - 'HELLO1160WORLD'
Table 2 - 'HELLOWORLD'
Run Code Online (Sandbox Code Playgroud)
现在,在我的情况下,我应该能够将它们作为一个条目进行匹配。
我目前的嵌套替换方法确实有效,但我不相信这是一种优雅的方法。任何帮助都感激不尽。谢谢
问题是 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)
这至少摆脱了疯狂的嵌套。它没有负面的性能影响。
| 归档时间: |
|
| 查看次数: |
23485 次 |
| 最近记录: |