在 Hive 中用空替换单引号'

问题描述

我有一个函数可以用下面的字符替换不同类型的字符。

CAST(TRANSLATE(REGEXP_REPLACE(UPPER(number),' |,|-|/|&|_|''''',''),'.|(|)','') as string) as number

一切正常,除了 ''''' 部分,我想用空替换单引号/撇号。

示例:

TYLER'SCOFFEE should come out as TYLERSCOFFEE

我查看了这个论坛的示例,似乎我们可以使用反斜杠来实现上述目的,但是当我使用如下所示的反斜杠时,它会引发错误

select CAST(TRANSLATE(REGEXP_REPLACE('TYLER\'SCOFFEE',|-|/|&|_|'\'','') as string) as number;
Error: Error while compiling statement: Failed: ParseException line 1:68 character '\' not supported here (state=42000,code=40000)

有人可以帮助我解决我的问题吗?谢谢。

解决方法

使用双引号正则表达式。双引号里面,单引号被屏蔽了:

select 'TYLER\'SCOFFEE' as original_str,regexp_replace('TYLER\'SCOFFEE',"'",'') result;

结果:

original_str    result
TYLER'SCOFFEE   TYLERSCOFFEE

另外如果你需要用同一个替换来替换很多不同的字符,把它们都放到[]中,不需要使用管道|

select regexp_replace('TYLER\'SCOFFEE,-/&_',"[,-/&_']",'')

结果:

TYLERSCOFFEE