You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Redshift中将字符串格式ID映射为名称并拼接结果?

在Redshift中实现用户宠物ID对应名称的拼接查询

要实现将users表pets列中的ID转换为对应的宠物名称并拼接成"dog, cat, lizard"格式的字符串,可按以下步骤编写查询语句:

1. 清洗拆分pets字段

首先去除pets字段的方括号,将字符串拆分为单个ID并展开为多行数据:

SELECT 
    user_id, -- 替换为users表实际主键字段
    CAST(UNNEST(STRING_TO_ARRAY(REGEXP_REPLACE(pets, '^\[|\]$', ''), ',')) AS INT) AS pet_id
FROM users
  • REGEXP_REPLACE(pets, '^\[|\]$', ''):移除字符串首尾的方括号,将"[1,2,4]"转换为"1,2,4"
  • STRING_TO_ARRAY(..., ','):按逗号拆分字符串为数组
  • UNNEST(...):将数组展开为多行记录
  • CAST(...) AS INT:将字符串类型的ID转换为整数,用于后续关联

2. 关联宠物名称表并聚合拼接

将拆分后的ID与pet_names表关联,获取对应名称后,使用LISTAGG函数按用户分组拼接名称:

SELECT 
    u.user_id,
    LISTAGG(pn.name, ', ') WITHIN GROUP (ORDER BY pn.id) AS pet_names
FROM (
    SELECT 
        user_id,
        CAST(UNNEST(STRING_TO_ARRAY(REGEXP_REPLACE(pets, '^\[|\]$', ''), ',')) AS INT) AS pet_id
    FROM users
) u
JOIN pet_names pn ON u.pet_id = pn.id
GROUP BY u.user_id
  • LISTAGG(pn.name, ', ') WITHIN GROUP (ORDER BY pn.id):按pet_id顺序将名称拼接为指定格式的字符串

处理异常场景

如果pets字段存在空值或格式错误,可使用TRY_CAST避免转换失败,并过滤无效ID:

SELECT 
    u.user_id,
    LISTAGG(pn.name, ', ') WITHIN GROUP (ORDER BY pn.id) AS pet_names
FROM (
    SELECT 
        user_id,
        TRY_CAST(UNNEST(STRING_TO_ARRAY(REGEXP_REPLACE(pets, '^\[|\]$', ''), ',')) AS INT) AS pet_id
    FROM users
) u
JOIN pet_names pn ON u.pet_id = pn.id
WHERE u.pet_id IS NOT NULL
GROUP BY u.user_id

内容的提问来源于stack exchange,提问作者Jwan622

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:40:28