例如,我想用以下腳本中的字符串r._to
替換t.s
中所有出現的字符串r._from
。替換所有出現的指定字符串值(存儲在表中)?
with r(_from, _to)
as (select 'aaa', ''
union all
select 'bbb', ''
union all
select 'ccc', ''
-- union all ..... and more
),
t(s)
as (select 'ABCaaaDEFbbb'
union all
select '123aaabbb456'
)
select t.s, .... -- replace aaa, bbb, ccc, ... with empty string ''
from t
應該返回
ABCDEF 123456
假設有一個強大的replace
函數接受一個映射表進行更換:select replace(t.s, (select * from r)) from t
,這是一個問題什麼。代碼將被放入視圖中,因此我無法更新表格或使用臨時表格。任何xquery技巧? (或者回落到動態創建與縮進replace(replace(replace(.....
使用XQuery視圖?)
這可能有助於http://stackoverflow.com/questions/7844481/aggregate-replace-in-sql-server – FuzzyTree 2014-09-23 20:22:57
據我所知沒有b用於多次替換的內置函數,因此執行此操作的方式涉及某種類型的迭代。這可以採取循環,遞歸cte,遊標的形式,或者使用其中一個或者甚至'select @var = ...'遞歸方法來滾動你自己的函數。也可以使用這些方法中的任何一種來創建和運行動態sql,它輸出類似'replace(替換(替換(...')。 – 2014-09-23 20:23:35
還要注意,所有常規解決方案都發生在sequence_中,如'select replace (替換('ab','a','b'),'b','a')''''aa'。 – 2014-09-23 20:29:27