我在MSSQL DB中有一个带有 varchar 事务标识符的事务引用表。
eg. 20121018A436712SF2CPMQ7177
但在某些交易中,存在一些特殊标识符形式的噪音,例如
1114
1160
H600
....
....
etc
我正在考虑使用 REPLACE 语句替换它们,如
select REPLACE (identifier, '%1114%', '') from Transactions
但我不知道如何使用所有这些条件进行 REPLACE 。
任何帮助将不胜感激。谢谢
答案 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)