0

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

eg. 20121018A436712SF2CPMQ7177

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

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

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

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

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

任何帮助都感激不尽。谢谢

4

2 回答 2

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 中的任何地方都应该删除它,例如

 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
于 2012-10-26T09:21:00.343 回答
0

如果你Transaction identifier是一个固定长度的字符串,比如说12个字符,你可以选择最右边的12个字符为;

SELECT RIGHT(identifier_column,12)
于 2012-10-26T11:01:28.720 回答