REPLACE不适用于BigQuery中的字符串

时间:2019-07-24 16:26:25

标签: string replace google-bigquery

我尝试使用REPLACE从字符串中删除一些单词,例如“ HOMEMAKER”和“ HOUSEWIFE”。但是我没有把那些词改成空白。为什么会这样?

我想使用REPLACE函数从EMPLOYER列中删除诸如' HOMEMAKER '和' HOUSEWIFE '之类的字符串,但是失败了。我也尝试过REGEXP_REPLACE,但再次失败。这些是我拥有的表(很抱歉,我想在这里构建表,但是某种程度上它不起作用)。

  

雇主
    退货/ HOMEMAKER
    HOMEMAKER / HOMEMAKER
    自雇/自制者

我们的代码如下:

SELECT EMPLOYER,
       CASE WHEN EMPLOYER LIKE '%HOUSE%WIFE%'
            THEN REGEXP_REPLACE(EMPLOYER,r'HOUSE%WIFE',' ')
            WHEN EMPLOYER LIKE '%HOME%MAKER%'
            THEN REGEXP_REPLACE(EMPLOYER, r'HOME%MAKER', ' ')
            ELSE '0'
            END AS SIGN
FROM fec.work
WHERE EMPLOYER LIKE '%HOME%MAKER%' 
OR EMPLOYER LIKE '%HOUSE%WIFE%'
GROUP BY 1,2;

我想要的结果是:

  

SIGN
  退役/
  /
  自雇/

但是我在SIGN中得到的列与EMPLOYER完全相同。谁能告诉我为什么replace函数没有进行任何更改?

2 个答案:

答案 0 :(得分:1)

您应该使用类似

REGEXP_REPLACE(EMPLOYER, r'HOUSEWIFE|HOMEMAKER',' ')   

您可以使用i标志使此替换项不区分大小写

REGEXP_REPLACE(EMPLOYER, r'(?i)HOUSEWIFE|HOMEMAKER',' ')   

答案 1 :(得分:0)

这些选项中的任何一个都适合您的情况。

with test as (
  select 'EMPLOYER' as my_str             union all 
  select 'RETIRED/HOMEMAKER' as my_str    union all 
  select 'HOMEMAKER/HOMEMAKER' as my_str  union all 
  select 'SELF-EMPLOYED/HOMEMAKER' as my_str
)
select 
  my_str,
  REPLACE(REPLACE(my_str, 'HOUSEWIFE', ' '), 'HOMEMAKER', ' ') as replaced_str,
  REGEXP_REPLACE(my_str, r'HOUSEWIFE|HOMEMAKER', ' ') as regexed_str
from test