Je recherche une fonction dans Presto pour concater deux colonnes avec un séparateur comme le soulignement.
4 Réponses :
Gérer:
select substr( concat(case when col1 is not null then ',' || col1 else '' end, case when col2 is not null then ',' || col2 else '' end ), 2 )
Vous pouvez utiliser:
select concat_ws(',', col1, col2)
Cela concatène les valeurs non NULL dans une chaîne. La chaîne résultante commencera par une virgule. Le substr()
supprime le premier caractère.
presto ne prend pas en charge les opérateurs logiques sur les chaînes
@MTT. . . J'ai corrigé l'opérateur concat - et +
n'est pas un opérateur logique , c'est un opérateur arithmétique .
select concat(col1, ',', col2)
. . Cette réponse n'est pas correcte. Il ne gère pas correctement les valeurs NULL
.
Vous recherchez ici la fonction array_join
, voir la documentation .
array_join (x, délimiteur, remplacement_null) â † 'varchar
Concatène les éléments du tableau donné à l'aide du délimiteur et d'une chaîne facultative pour remplacer les valeurs nulles.
Exemple:
les colonnes sont c1, c2, vous pouvez bien sûr en ajouter plus:
WITH demo_table (c1,c2) AS (SELECT * FROM (VALUES (1,2),(3,4),(5,null),(7,8) )) SELECT array_join(array[c1,c2], '_', 'NA') FROM demo_table
Les résultats seront:
1_2
3_4
5_NA
7_8
Cela a été ajouté à Presto il y a quelques versions: https://prestosql.io/docs/current/functions/string.html
concat_ws(string0, string1, ..., stringN) â varchar# Returns the concatenation of string1, string2, ..., stringN using string0 as a separator. If string0 is null, then the return value is null. Any null values provided in the arguments after the separator are skipped. concat_ws(string0, array(varchar)) â varchar Returns the concatenation of elements in the array using string0 as a separator. If string0 is null, then the return value is null. Any null values in the array are skipped.