如何仅从字符串中提取字母数字字符? (SQL Google BigQuery)

时间:2019-06-17 07:03:08

标签: sql google-bigquery

说我有一个名为商人的列,其中包含以下值:

getServletConfigClasses()

我如何提取它:

DispatcherServlet

到目前为止,我一直在为每个字符使用Al's Coffee Belinda & Mark Bakery Noodle Shop 38 ,但是有什么方法可以避免使用这么多的嵌套替换?

4 个答案:

答案 0 :(得分:1)

  

如何仅从字符串中提取字母数字字符?

以下是用于BigQuery标准SQL

您也可以使用\W - not word characters (≡ [^0-9A-Za-z_]),如下面的示例

REGEXP_REPLACE(merchant, r'\W', '')   

如果要应用于问题的样本数据

#standardSQL
WITH `project.dataset.table` AS (
  SELECT "Al's Coffee" merchant UNION ALL
  SELECT "Belinda & Mark Bakery" UNION ALL
  SELECT "Noodle Shop 38" 
)
SELECT REGEXP_REPLACE(merchant, r'\W', '') cleaned_merchant
FROM `project.dataset.table`   

结果是

Row cleaned_merchant     
1   AlsCoffee    
2   BelindaMarkBakery    
3   NoodleShop38       

很明显,如果您需要小写的结果-添加相应的功能-例如

SELECT REGEXP_REPLACE(LOWER(merchant), r'\W', '') cleaned_merchant
FROM `project.dataset.table` 

答案 1 :(得分:0)

我为您提供解决方案!

选择     商家AS Original,     LOWER(商家)AS小写 FROM TableName;

小写字母列显示所需的结果!

答案 2 :(得分:0)

在BigQuery中,您可以使用regexp_replace()

select regexp_replace(merchant, '[^a-zA-Z0-9]', '')

这是要用空字符串替换非字符或数字的任何内容。如果要保留更多字符,请将其添加到字符类中。

答案 3 :(得分:0)

BigQuery对我有用的是

SELECT regexp_replace(lower(Al's Coffee), "[^0-9a-zA-z]+","")

这将返回alscoffee