【问题标题】:Regex SQL BigQuery get number between '_'正则表达式 SQL BigQuery 获取 '_' 之间的数字
【发布时间】:2021-04-29 09:33:07
【问题描述】:

考虑到我有一张桌子。

第一个:

user_id name
1 OFF472_100_012_280421
1 PPUU321_010_012_280421
2 HHTUE_011_012_280421
2 VENT471_012_012_280421

我想提取名称列中两个“_”之间的第一个数字

理想的表应该是这样的

user_id name number
1 OFF472_100_012_324504 100
1 PPUU321_010_012_345625 10
2 HHTUE_011_012_345345 11
2 VENT471_012_012_345567 12

请帮我查询一下sql! 谢谢。

【问题讨论】:

    标签: sql regex google-bigquery


    【解决方案1】:

    将REGEXP_EXTRACT 与捕获组一起使用:

    SELECT user_id, name, REGEXP_EXTRACT(name, r'^[^_]+_0*(\d+)')
    FROM yourTable;
    

    注意:您似乎还想去掉任何前导零,所以我已经这样做了。如果要保留所有数字,请使用^[^_]+_(\d+)。

    【讨论】:

      【解决方案2】:

      使用split 和offset:

      select *, CAST(split(name, '_')[OFFSET(1)] AS INT64) as number
      from mytable
      

      【讨论】:

      • @Smasell 。 . .这不提取。第一个数字(如您的问题所问),这将提取第二个组件。实际上,如果第二个组件不是数字,这将返回错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 2023-01-07
      相关资源
      最近更新 更多