簡體   English   中英

具有 DISTINCT 值的 Snowflake CONCAT 字符串

[英]Snowflake CONCAT strings with DISTINCT values

我正在做一個合並,其中一個字符串存在於我的目標表中。

為此,我想連接一個新的增量值,它是一個; 我的分隔字符串列表

WHEN MATCHED .... UPDATE clause

eg.

set TARGET_VALUE = 'abc';

set DELTA = 'abc;def';

連接后:

OUTPUT should be abc;def;


select CONCAT($TARGET_VALUE,';', $DELTA);



  Gives me    abc;abc;def.

有沒有辦法在不將字符串轉換為 Array 和以下內容的情況下實現此內聯: How to concatenate arrays in Snowflake with distinct values?

我想避免創建自定義 function 或代碼段,並檢查是否有內聯方法來實現此目的。

我寫了一個 UDF 來實現這個,但是有內聯的方式嗎?

set TARGET_VALUE = 'xyhx;abc';

set DELTA = 'abc;def';

select string_distinct_concat($TARGET_VALUE, $DELTA);

// Distinct Concatenate
create or replace function string_distinct_concat(target varchar, delta varchar)
    returns variant
    language javascript
    comment = 'Returns a distinct concatenation of two strings'
as
$$

     if (TARGET == null) {
        return DELTA
     }
      
     if (DELTA == null) {
        return TARGET
     }
     const target_array = TARGET.split(';');
     const delta_array = DELTA.split(';');
     const set = new Set([...target_array,...delta_array])
     return [...set].join(';');
$$
;

這是一種將 split_to_table 和 listagg 與 distinct 結合使用的方法。

set TARGET_VALUE = 'abc';

set DELTA = 'abc;def';

select listagg(distinct t.value,';') final_val from 
table(split_to_table(concat($DELTA,';',$TARGET_VALUE),';')) t;
FINAL_VAL
abc;def

像 DELTA 一樣用部分字符串設置目標。 這應該包含在最終的 output 中。

set TARGET_VALUE = 'ab';

select listagg(distinct t.value,';') final_val from 
table(split_to_table(concat($DELTA,';',$TARGET_VALUE),';')) t;
FINAL_VAL
abc;def;ab

這里有兩種處理 NULL 的方法,我更喜歡 CTE 方法

with var_cte as
(
select column1 as var from values 
($DELTA),
($TARGET_VALUE)
), no_null_cte as
(
select t.value from var_cte, table(split_to_table(var,';')) t
)select listagg(distinct value,';') from no_null_cte;

使用 NVL -

select listagg(distinct t.value,';') from table
(
split_to_table(concat(nvl($DELTA,''),';',nvl($TARGET_VALUE,'')),';')) t 
where t.value != '';

暫無
暫無

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

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