1

为措辞不当的问题道歉。

我有以下列description的内容,例如:

2511420s5
38114CR
2510014IND

我想摆脱s5,CRINDusingCASE声明。

就像是:

select 
    CASE 
       WHEN description LIKE ('%CRT%', '%IND%', '%MR%') THEN ''
       ELSE description
    END as test 
from table

总而言之,如果它存在,我想S5从我的字符串中删除它。

我有一个大约 15 种可能性的列表,所以不想使用嵌套的替换语句。

可以这样做CASE还是有更好的选择?

谢谢,

4

2 回答 2

0

假设没有更好的规则;即文本并不总是在字符串的末尾,您可以将忽略标记存储在表中,加入并检查;

;with ignore(token) as ( --a real table is better
    select 's5'  union
    select 'ind' union
    select 'cr'
)
select distinct
    id, -- need > 1 col
    case when ignore.token is null then description else '' end
from table
    left join ignore on description like '%' + token + '%'
于 2013-07-11T13:49:24.787 回答
0

这是正确的查询:

;with ignore(token) as (
    select 's5'  union
    select 'ind' union
    select 'cr'
)
select distinct
    id, -- need > 1 col
    case when ignore.token is null then description 
    else REPLACE(description, ignore.token,  '')
    end
from table_1
    left join ignore on description like '%' + token + '%';
于 2013-07-11T14:58:34.660 回答