Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用不同的替换替换替换DatabaseA列中的多个字符串_Sql_Regex_Hive_Regexp Replace - Fatal编程技术网

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(),以搜索并保留空间。提供变化足够大的数据示例,以反映要应用的逻辑。还包括所需的结果(而不是您当前通过尝试获得的结果)