簡體   English   中英

從字段 sql/presto 中提取子字符串

[英]Extract substrings from field sql/presto

我的數據庫中有包含由 / 分隔的值的列。 我試圖從列中提取某些值並用它們創建新行。

數據示例如下所示;

user/values2/class/year/subject/18/9/2000291.csv
holiday/booking/type/1092/1921/1.csv
drink/water/juice/1/232/89.json
drink/water1/soft/90091/2/89.csv
car/type/1/001/1.json
game/mmo/1/2/3.json

我想從數據中提取最后 3 個數字,例如,從

user/values2/class/year/subject/18/9/2000291.csv

我想要

x = 18
y = 9
z = 200291

並顯示這些是表中的新字段。

我一直在研究和使用 presto 查詢,但無法弄清楚如何實現我想要的。 我寫了下面的查詢,但無法讓它工作。

SELECT origin
         split_part(origin, '.' & '/', 1) as z,
         split_part(origin, '.' & '/', 2) as y,
         split_part(origin, '.' & '/', 3) as x,
FROM "data_customer";

已編輯

當前表

在此處輸入圖片說明

期望的結果

在此處輸入圖片說明

快速代碼:

with your_data as(
select * from (values
'user/values2/class/year/subject/18/9/2000291.csv',
'holiday/booking/type/1092/1921/1.csv',
'drink/water/juice/1/232/89.json',
'drink/water1/soft/90091/2/89.csv',
'car/type/1/001/1.json',
'game/mmo/1/2/3.json'
)s (origin)
)

select s.origin, origin_splitted[3] x, origin_splitted[2]  y, regexp_extract(origin_splitted[1],'\d*') z
from
(
select s.origin, reverse(split(s.origin,'/')) origin_splitted from your_data s
)s

結果:

origin  x   y   z
user/values2/class/year/subject/18/9/2000291.csv    18  9   2000291
holiday/booking/type/1092/1921/1.csv              1092  1921    1
drink/water/juice/1/232/89.json                      1  232 89
drink/water1/soft/90091/2/89.csv                 90091  2   89
car/type/1/001/1.json                              1    1   1
game/mmo/1/2/3.json                                1    2   3

如有必要,將相同的 regexp_extract 應用於 x 和 y 列,或者可以應用另一個拆分而不是 regexp_extract,希望您明白

暫無
暫無

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

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