如何在 BigQuery 中使用 REGEXP_EXTRACT 提取数值?

How to extract just numeric value with REGEXP_EXTRACT in BigQuery?

我正在尝试仅从 BigQuery 的特定列中提取数字。 相关字段的格式为:value = "Livraison_21J|Relais_19J" or "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

您可以使用

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

regex demo

详情

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