如何在“,”或“-”或“”之前使用子字符串?

时间:2019-09-02 04:16:59

标签: sql substring presto strpos

我在Presto中有两个可以与"po_num"连接的数据集。

第一个数据集的纯数字"po_num" 7位或10位数字。 (例如1234567)

第二个数据集中的Po_num具有以"," or "-" or " ". (e.g. 1234567-1 or 1234567,1 or 1234567 -1)

开头的额外字符串。

我认为我需要一个函数

1)检测第二个po_num中第一个非数字字符串的位置,然后

2)在位置之前加上一个子串。或任何其他方式来解决此问题...

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

假设您希望匹配的7或10位数字始终连续出现,而没有其他任何中间字符,那么您可以在此处尝试使用REGEXP_LIKE

SELECT *
FROM table1 t1
INNER JOIN table2 t2
    ON REGEXP_LIKE(t2.Po_num, '\b' || t1.po_num || '\b');

答案 1 :(得分:1)

您可以使用regexp_extract:

with your_data as(
select * from (values
'1234567-1','1234567,1','1234567 -1'
)s (po_num)
)

select regexp_extract(po_num,'^(\d*)',1) as po_num  from your_data s

结果:

po_num

1234567
1234567
1234567

答案 2 :(得分:-1)

为什么不只取每个数字的前7个数字(并确保它们具有相同的类型,请使用CAST(x AS int))并加入。