SQL多个REPLACE案例

时间:2012-10-26 09:05:35

标签: sql sql-server

我在MSSQL DB中有一个带有 varchar 事务标识符的事务引用表。

eg. 20121018A436712SF2CPMQ7177

但在某些交易中,存在一些特殊标识符形式的噪音,例如

1114
1160
H600
....
....
etc

我正在考虑使用 REPLACE 语句替换它们,如

select REPLACE (identifier, '%1114%', '') from Transactions

但我不知道如何使用所有这些条件进行 REPLACE

任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

我会构建一个“特殊标识符”表并填充它,例如

create table special_identifiers (
   id int identity not null primary key clustered,
   key varchar(10) not null unique
);

然后,您将在SELECT

中执行此类特殊ID的删除
    SELECT i.col1, i.col2,
           CASE WHEN si.key IS NOT NULL then '' ELSE i.identifier END identifier
      FROM Transactions i
 LEFT JOIN special_identifiers si on si.key = i.identifier

如果你真的需要使用LIKE,这可以很容易地扩展,比如id中任何地方的'xxx'应该删除它,例如。

 LEFT JOIN special_identifiers si on i.identifier LIKE '%' + si.key + '%'

虽然我只是将%'添加到key列中,以获得更大的灵活性。

最后,如果你根本无法坚持表格,你总是可以虚拟地弥补,例如。

    SELECT i.col1, i.col2,
           CASE WHEN si.key IS NOT NULL then '' ELSE i.identifier END identifier
      FROM Transactions i
 LEFT JOIN (select '1114' key UNION ALL
            select '1160') si on si.key = i.identifier

答案 1 :(得分:0)

如果Transaction identifier是固定长度的字符串,例如12个字符,则可以选择最右边的12个字符;

SELECT RIGHT(identifier_column,12)