【问题标题】:How to extract just numeric value with REGEXP_EXTRACT in BigQuery?如何在 BigQuery 中使用 REGEXP_EXTRACT 仅提取数值?
【发布时间】:2020-03-05 09:03:36
【问题描述】:

我正在尝试仅从 BigQuery 中的特定列中提取数字。 相关字段的格式如下: value = "Livraison_21J|Relais_19J" 或 "RELAIS_15 DAY" 我正在尝试提取关键字“Relais”前面的每个值的天数。 天数范围从 1 到 100。

我是这样做的:

SELECT CAST(REGEXP_EXTRACT(delivery, r"RELAIS_([0-9]+J)") as string) as relayDay
FROM TABLE

我希望能够只提取天数,而不管数字后面的字符串是“J”还是“DAY”。

样本数据:

RETRAIT_2H|LIVRAISON_5J|RELAIS_5J    |     5J

LIVRAISON_21J|RELAIS_19J             |     19J

LIVRAISON_21J|RELAIS_19J             |     19J

RETRAIT_2H|LIVRAISON_3J|RELAIS_3J    |     3J

【问题讨论】:

  • 请提供应匹配的样本数据
  • 和第一个数字一样,你的意思是19吗?第二个数字 > 15 后面没有大写 J。这意味着你的模式是错误的。
  • 试试SPLIT(REGEXP_REPLACE(delivery, r'[^0-9|]+',''), '|')
  • 添加样本数据
  • 样本数据中的| 是什么意思?预期结果?所以你想要一个值,在最后一个 JDAY 之前?那就试试REGEXP_EXTRACT(delivery, r"(?:.*\D)?(\d+)\s*(?:J|DAY)")

标签: sql regex google-bigquery extract


【解决方案1】:

你可以使用

REGEXP_EXTRACT(delivery, r"(?:.*\D)?(\d+)\s*(?:J|DAY)")

regex demo

详情

  • (?:.*\D)? - 一个可选的非捕获组,它尽可能多地匹配除换行符 chsrs 之外的 0+ 个字符,然后是一个非数字字符(此模式需要将索引推进到最后一个数字序列之前的位置,而不是最后一个数字)
  • (\d+) - 第 1 组(正是 REGEXP_EXTRACT 返回的内容):一位或多位数字
  • \s* - 0+ 个空格
  • (?:J|DAY) - JDAY 子字符串。

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多