雪花-模式匹配与内部联接

时间:2020-05-21 11:04:55

标签: snowflake-cloud-data-platform

在雪花中,我们可以基于正则表达式/子字符串而不是完全相等地加入2个表之间的列吗?

例如,在表A /列A和表B /列B中,获取所有记录,其中列A是列B的子字符串。

我提到了雪花的REGEXP_SUBSTR,SUBSTR,SUBSTRING和CONTAINS函数,但无法弄清楚如何将其用作Inner JOIN。

1 个答案:

答案 0 :(得分:2)

您可以使用子字符串,charindex函数以及可能的一些regexp命令来完成此操作,这是一些非常简单的示例。

CREATE TABLE table_a (column_a VARCHAR(100));
INSERT INTO table_a VALUES ('hello world'),('testing 123'),
            ('I like Jelly'),('this is a good question');

CREATE TABLE table_b (column_b VARCHAR(100));
    INSERT INTO table_b VALUES ('this is table b'),('world'),
       ('jelly'),('Netflix or Hulu?'),('Goodbye');

SELECT a.*
FROM   table_a a
INNER JOIN table_b b 
   ON SUBSTR(a.column_a, CHARINDEX(' ', a.column_a) + 1, length(a.column_a))
      = b.column_b;
--1 row selected, 'hello world'


SELECT a.*, b.*
FROM   table_a a,
       table_b b 
WHERE  CHARINDEX(UPPER(b.column_b), UPPER(a.column_a)) > 0;
--2 rows selected, 'hello world'/world & 'I like Jelly'/jelly