使用不同的替换替换databsae列中的多个字符串

时间:2017-07-14 12:22:41

标签: sql regex hive regexp-replace

我有一个蜂巢表如下:

+----+---------------+-------------+
| id | name          | partnership |
+----+---------------+-------------+
| 1  | sachin sourav | first       |
| 2  | sachin sehwag | first       |
| 3  | sourav sehwag | first       |
| 4  | sachin_sourav | first       |
+----+---------------+-------------+

在此表中,我需要替换" sachin"等字符串。与" ST"和" Sourav"与" SG"。我正在使用以下查询,但它没有解决目的。

查询:

select 
    *,
    case
       when name regexp('\\bsachin\\b') 
          then regexp_replace(name,'sachin','ST')
       when name regexp('\\bsourav\\b') 
          then regexp_replace(name,'sourav','SG')
       else name
    end as newName
from sample1;

结果:

+----+---------------+-------------+---------------+
| id | name          | partnership | newname       |
+----+---------------+-------------+---------------+
| 4  | sachin_sourav | first       | sachin_sourav |
| 3  | sourav sehwag | first       | SG sehwag     |
| 2  | sachin sehwag | first       | ST sehwag     |
| 1  | sachin sourav | first       | ST sourav     |
+----+---------------+-------------+---------------+

问题:我的意图是,当id = 1时,newName列应该将值带为" ST SG"。我的意思是它应该替换两个字符串。

1 个答案:

答案 0 :(得分:0)

您可以嵌套替换:

select s.*,                                             
       replace(replace(s.name, 'sachin', 'ST'), 'sourav', 'SG') as newName
from sample1 s;

您不需要正则表达式,因此请使用replace()