2012-10-26 40 views
0

我有一个交易参考表varchar MSSQL DB中的事务标识符。SQL多个REPLACE案例

eg. 20121018A436712SF2CPMQ7177 

但在某些交易中,存在的特殊标识符这样

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

我想用的形式,一些噪音REPLACE语句来代替他们喜欢

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

但我不知道该怎么办REPLACE使用所有这些条件。

任何帮助将非常感激。谢谢

回答

1

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

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

然后,您可以执行一个SELECT

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 

这可以很容易地扩展你的这些特殊的IDS这样的去除,如果你真的需要使用等,如“XXX”任何地方一个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 
+0

谢谢你,做什么,我是后(有一些调整) – dopplesoldner

0

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

SELECT RIGHT(identifier_column,12) 
+0

我将保留该技术在心中,但在目前的情况下噪音能在交易中的任何位置嵌入,没有特别的右手边 – dopplesoldner