2017-04-14 20 views
1

CONCAT()は、値がNULLの場合にNULLを返します。 IFNULL()を使用して にCONCAT()に渡されたすべてのフィールドをラップする必要があります。 がNULLを無視するCONCAT()のバリエーションはありますか?例えばNULL値を許容するCONCAT()のバリエーションはありますか?

:代わりに

#standardSQL 
WITH data AS (
    SELECT 'a' a, 'b' b, CAST(null AS STRING) nu 
) 

SELECT CONCAT(a, b, nu) concatenated, ARRAY_TO_STRING([a,b,nu], ',') w_array_to_string 
FROM `data` 

---> 
null 

答えて

2

クイックJam Session質問

で潜在的にあります。ここでの実際のユースケースの無制限の組み合わせ 以下はバリエーションです:

#standardSQL 
WITH data AS (
    SELECT 'a' a, 'b' b, 'c' c UNION ALL 
    SELECT 'y', 'x', NULL UNION ALL 
    SELECT 'v', NULL, 'w' 
) 
SELECT 
    *, 
    CONCAT(a, b, c) by_concat, 
    ARRAY_TO_STRING([a,b,c], '') by_array_to_string, 
    ARRAY_TO_STRING([a,b,c], '', '?') with_null_placeholder, 
    ARRAY_TO_STRING(
    (SELECT ARRAY_AGG(col ORDER BY col DESC) 
     FROM UNNEST([a,b,c]) AS col 
     WHERE NOT col IS NULL) 
    , '') with_order 
FROM `data` 

出力は次のようになります。

a b  c  by_concat by_array_to_string with_null_placeholder with_order 
- ---- ---- --------- ------------------ --------------------- ---------- 
y x  null null  yx     yx?      yx 
a b  c  abc   abc     abc      cba 
v null w  null  vw     v?w      wv 
1

使用ARRAY_TO_STRING([COL1、COL2、...]):興味深いテーマに

#standardSQL 
WITH data AS (
    SELECT 'a' a, 'b' b, CAST(null AS STRING) nu 
) 

SELECT ARRAY_TO_STRING([a,b,nu], '') w_array_to_string 
FROM `data` 

---> 
ab 
+0

は( '' [A、B、NU〕、) 'SELECT ARRAY_TO_STRINGする必要があります' –

+0

右!ありがとう!! –

関連する問題