Sql 用不同的替换替换替换DatabaseA列中的多个字符串
我有一个蜂箱表,如下所示:Sql 用不同的替换替换替换DatabaseA列中的多个字符串,sql,regex,hive,regexp-replace,Sql,Regex,Hive,Regexp Replace,我有一个蜂箱表,如下所示: +----+---------------+-------------+ | id | name | partnership | +----+---------------+-------------+ | 1 | sachin sourav | first | | 2 | sachin sehwag | first | | 3 | sourav sehwag | first | | 4 | sachin_
+----+---------------+-------------+
| id | name | partnership |
+----+---------------+-------------+
| 1 | sachin sourav | first |
| 2 | sachin sehwag | first |
| 3 | sourav sehwag | first |
| 4 | sachin_sourav | first |
+----+---------------+-------------+
在这个表中,我需要用“ST”替换“sachin”,用“SG”替换“Sourav”。我使用下面的查询,但它不能解决问题
查询:
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”。我的意思是它应该替换两个字符串。您可以嵌套替换:
select s.*,
replace(replace(s.name, 'sachin', 'ST'), 'sourav', 'SG') as newName
from sample1 s;
您不需要正则表达式,所以只需使用
replace()
当id=4时,我的名称为“sachin_sourav”,不应更改。只有完整的单词需要替换。我尝试了嵌套的regexp\u replace,它工作正常。我可以不需要case..when语句吗?“sachin”只在字符串的开头,后面总是一个空格吗?如果是这样,请使用replace(s.name,'sachin','ST')
替换内部replace(),以搜索并保留空间。提供变化足够大的数据示例,以反映要应用的逻辑。还包括所需的结果(而不是您当前通过尝试获得的结果)