大查询;仅从字符串中提取数字
BigQuery; extract numbers only from a string
我的数据看起来像一个 1x1000 向量,其中输入的数量可变。有时只是年龄,但有时他们会增加体重和状态 ID。
85 age
15 age; 68 Weight
25 age; 80 Weight; 02 Alaska
72 Weight; 50 Wyoming
我想得到的输出只是数字 - 即
85
15 68
25 80 02
72 50
我使用 SPLIT 并没有成功,因为它返回了 2000 多行而不是 1000 行。所以我不知道该怎么做。
除非SPLIT可以组合起来告诉我split之前有多少个信息点。 IE。
85 1
15 2
68 2
25 3
80 3
等等
您可以使用 REGEXP_REPLACE
:
SELECT REGEXP_REPLACE("25 age; 80 Weight; 02 Alaska",'[^0-9 ]','')
阅读更多关于 Regular Expression functions
为了完整起见 - 这是您可以使用 SPLIT 来获得拆分前信息点计数的结果:
select left(xs, 2), count(xs) within record from(
select split(x, ";") xs from
(select "85 age" as x),
(select "15 age; 68 Weight" as x),
(select "25 age; 80 Weight; 02 Alaska" as x),
(select "72 Weight; 50 Wyoming" as x))
我的数据看起来像一个 1x1000 向量,其中输入的数量可变。有时只是年龄,但有时他们会增加体重和状态 ID。
85 age
15 age; 68 Weight
25 age; 80 Weight; 02 Alaska
72 Weight; 50 Wyoming
我想得到的输出只是数字 - 即
85
15 68
25 80 02
72 50
我使用 SPLIT 并没有成功,因为它返回了 2000 多行而不是 1000 行。所以我不知道该怎么做。 除非SPLIT可以组合起来告诉我split之前有多少个信息点。 IE。
85 1
15 2
68 2
25 3
80 3
等等
您可以使用 REGEXP_REPLACE
:
SELECT REGEXP_REPLACE("25 age; 80 Weight; 02 Alaska",'[^0-9 ]','')
阅读更多关于 Regular Expression functions
为了完整起见 - 这是您可以使用 SPLIT 来获得拆分前信息点计数的结果:
select left(xs, 2), count(xs) within record from(
select split(x, ";") xs from
(select "85 age" as x),
(select "15 age; 68 Weight" as x),
(select "25 age; 80 Weight; 02 Alaska" as x),
(select "72 Weight; 50 Wyoming" as x))