我使用標準的sql並希望從結尾提取第三個子字符串。Google Big Query中的第三個子字符串
Example Input: "Search-site-variable-brand-0-city-none-18053517"
Output: "city"
我使用標準的sql並希望從結尾提取第三個子字符串。Google Big Query中的第三個子字符串
Example Input: "Search-site-variable-brand-0-city-none-18053517"
Output: "city"
我只想指出,如果您打算將此轉換應用於多列,將邏輯拉入UDF可能會很有用。下面是如何做到這一點的例子:
CREATE TEMP FUNCTION SecondSubstringFromEnd(s STRING) AS ((
SELECT arr[SAFE_OFFSET(ARRAY_LENGTH(arr) - 3)]
FROM (
SELECT SPLIT(s, '-') AS arr
)
));
WITH Input AS (
SELECT 'Search-site-variable-brand-0-city-none-18053517' AS str UNION ALL
SELECT 'a-b' UNION ALL
SELECT 'w-x-yyy-z'
)
SELECT
str,
SecondSubstringFromEnd(str) AS second_substring_from_end
FROM Input;
無法保存視圖。不支持視圖內的CREATE TEMPORARY FUNCTION語句 – Zzema
這可能做的伎倆:
WITH data AS(
select "Search-site-variable-brand-0-city-none-18053517" as Input
)
SELECT
CASE WHEN ARRAY_LENGTH(SPLIT(Input, '-')) > 3 THEN SPLIT(Input, '-')[OFFSET(ARRAY_LENGTH(SPLIT(Input, '-')) - 3)] END word
FROM data
它返回NULL
的情況下,字符串沒有裂開,如空字符串。
很少有更多的變化對BigQuery的標準SQL:
#standardSQL
WITH YourTable AS(
SELECT 'Search-site-variable-brand-0-city-none-18053517' AS Input UNION ALL
SELECT 'Second-substring-from-the-end-in-Google-BigQuery' UNION ALL
SELECT 'bigQuery-assign-a-value-to-table-1-based-on-table-2' UNION ALL
SELECT 'Error-Message-Too-many-sources-provided-15285-Limit-is-10000' UNION ALL
SELECT 'Google-Bigquery-data-import-from-Google-Analytics-360' UNION ALL
SELECT 'Bigquery-Partitioning-data-past-2000-limit'
)
SELECT
Input,
REVERSE(SPLIT(REVERSE(Input), '-')[SAFE_ORDINAL(3)]) AS Output_1,
ARRAY_REVERSE(SPLIT(Input, '-'))[SAFE_ORDINAL(3)] AS Output_2
FROM YourTable
你能澄清你所說的「第二子」是什麼意思? 'city'看起來像是我的第三個子串。我在想你可能會跳過基於數字的子串?只是想想 –
@MikhailBerlyant謝謝,我編輯了主題 – Zzema