簡體   English   中英

如何在bigquery中提取字符串的特定部分

[英]How to extract a specific portion of a string in bigquery

我有一個看起來類似於此的字符串:

28f1e5f7-47c6-4d67-bcbf-9e807c379076-9780-gThGFkHY0CeFCPwA6Efys7

我想根據“-”拆分它,但也告訴它在 position 或指向進行拆分的位置。 我的目標是刪除最后兩個字符串

我想要的最終結果應該是這樣的:

28f1e5f7-47c6-4d67-bcbf-9e807c379076

我知道我可以拆分偏移量然后連接。 我想知道是否有更直接的方法,因為它需要我拆分 5 次然后連接 5 次?

你能試試這個查詢嗎?

with myTable as (
  select 1 as id, "28f1e5f7-47c6-4d67-bcbf-9e807c379076-9780-gThGFkHY0CeFCPwA6Efys7" as sampleString
  union all select 2 as id, "28f1e5f7-47c6-4d67-bcbf-9e807c379076-9780-gThGFkHY0CeFCPwA6Efys7-dhushkdha" as sampleString
)


SELECT id, sampleString,
  (
    SELECT STRING_AGG(samp, '-' ORDER BY index) 
    FROM UNNEST(SPLIT(sampleString, '-')) samp WITH OFFSET index 
    WHERE index BETWEEN 0 AND (select array_length(split(sampleString,'-')) - 3)
  ) 
FROM myTable

此查詢將省略最后兩個值,因為它由“-”分隔

Output:

在此處輸入圖像描述

我在第二列中添加了另一個值,只是為了測試是否會刪除最后兩個值。

您也可以考慮使用INSTR()

INSTR(source_value, search_value[, position[, occurrence]])

WITH sample_data AS (
  SELECT '28f1e5f7-47c6-4d67-bcbf-9e807c379076-9780-gThGFkHY0CeFCPwA6Efys7' str
)
SELECT SUBSTR(str, 1, INSTR(str, '-', -1, 2) - 1)  -- drop the last two strings
  FROM sample_data;

在此處輸入圖像描述

還有一些選擇

select str, 
  regexp_extract(str, r'^(?:[^-]+-){4}[^-]+') first_five_v1,
  substring(str, 1, regexp_instr(str, r'-', 1, 5) - 1) first_five_v2
from your_table           

       

與 output

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM