【问题标题】:How to split a string column into rows including NULLs?如何将字符串列拆分为包含 NULL 的行?
【发布时间】:2021-10-24 03:54:15
【问题描述】:

我想将一个字符串列拆分为包含 NULL 值的行。

我使用以下,但是,它不返回 NULL 行。 有没有其他方法可以在不消除 NULL 行的情况下实现这一点?

SELECT TRIM(REGEXP_REPLACE(s.value, '[{}_]', ' ')) AS extracted
FROM t1, LATERAL SPLIT_TO_TABLE(val, ',') s

以下是示例数据:

WITH t1 AS (
SELECT 'A' AS id, '{Other}' AS val UNION ALL
SELECT 'A' AS id, NULL AS val UNION ALL
SELECT 'A' AS id, '{Other Questions,Missing Document}' AS val UNION ALL
SELECT 'A' AS id, NULL AS val )

期望的输出:

+----+------------------+
| id |    extracted     |
+----+------------------+
| A  | Other            |
| A  |                  |
| A  | Other Questions  |
| A  | Missing Document |
| A  |                  |
+----+------------------+

【问题讨论】:

    标签: sql snowflake-cloud-data-platform flatten


    【解决方案1】:

    使用LEFT JOIN

    SELECT TRIM(REGEXP_REPLACE(s.value, '[{}_]', ' ')) AS extracted
    FROM t1 LEFT JOIN LATERAL
         SPLIT_TO_TABLE(t1.val, ',') s
         ON 1=1;
    

    【讨论】:

      【解决方案2】:

      您可以在横向拆分表格上放置一个 IFF:

      WITH t1 AS (
      SELECT 'A' AS id, '{Other}' AS val UNION ALL
      SELECT 'A' AS id, NULL AS val UNION ALL
      SELECT 'A' AS id, '{Other Questions,Missing Document}' AS val UNION ALL
      SELECT 'A' AS id, NULL AS val )
      
      
      SELECT TRIM(REGEXP_REPLACE(s.value, '[{}_]', ' ')) AS extracted
      FROM t1, LATERAL SPLIT_TO_TABLE(iff(val is null, '', val), ',') s
      
      ;
      

      【讨论】:

        猜你喜欢
        • 2020-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多