我想在像“?”这样的字符时制作左侧分割URI或“#”出现。
SELECT
CASE
WHEN URI LIKE '%?%' THEN FIRST(SPLIT(URI, "?"))
WHEN URI LIKE '%#%' THEN FIRST(SPLIT(URI, "#"))
END WITHIN RECORD AS URI_FILTER
FROM (SELECT "/A/A1/AA2/205.html#jfsalf" AS URI)
输出必须为:/A/A1/AA2/205.html
要测试的另一个URI:
/A/A1/AA2/205.html?pRef=209888
错误:未应用聚合函数的范围
答案 0 :(得分:1)
我认为regular expression更适合这个
SELECT
URI, REGEXP_EXTRACT(URI, r'(.*?)[?#]')
FROM
(SELECT "/A/A1/AA2/205.html#jfsalf" AS URI),
(SELECT "/A/A1/AA2/205.html?pRef=209888" as URI)
答案 1 :(得分:1)
使用REGEXP_EXTRACT
。如果URI可能没有#
或?
,您可以使用正则表达式来解释这种情况:
#standardSQL
WITH T AS (
SELECT '/A/A1/AA2/205.html#jfsalf' AS path UNION ALL
SELECT '/A/A1/AA2/205.html?pRef=209888' AS path UNION ALL
SELECT '/A/A1/AA2/205.html' AS path
)
SELECT
REGEXP_EXTRACT(path, r'([^#?]+)') AS left_path
FROM T;
答案 2 :(得分:0)
SPLIT函数以ARRAY格式(嵌套的单元格)返回数据,对于某些目的而言可能非常有用。
如果需要这种格式,可以选择使用REPLACE操作将各种键(#,%等)转换为可以在SPLIT中使用的单个键。
在下面的代码中,我们将#转换为?然后在?上分割。
SPLIT(REPLACE(URI,“#”,“?”),“?”)