2012-10-26 68 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