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

Vertica中使用Trim函数更新字符串报括号位置语法错误如何解决

错误原因

这个语法错误和括号配对无关,核心是UPDATE语句的SET子句写法不符合SQL语法规则:
SET后只能直接填写需要更新的表原生列名作为赋值目标,不支持把split_part()这类函数的返回值放在等号左侧被赋值。数据库解析到split_part后的左括号时,发现该位置不符合语法预期(本该出现列名),才会抛出"("位置的语法错误。

修正后的SQL

你需要的效果是对client_info按:分割后的第9段做去空格处理,其余分段保持不变,再把完整字符串更新回原列,正确写法(适用于PostgreSQL、Redshift、Greenplum等支持split_part的数据库)如下:

UPDATE table1
SET client_info = (
    SELECT string_agg(
        CASE WHEN rn = 9 THEN Trim(part) ELSE part END,
        ':' ORDER BY rn
    )
    FROM unnest(string_to_array(client_info, ':')) WITH ORDINALITY AS parts(part, rn)
)
WHERE lm_id = 122344556 AND record_id = 11111;
写法说明
  • 逻辑是先把client_info按:拆分为带序号的分段,遍历分段时仅对第9段执行Trim()去前后空格,其余分段保留原值,最后按原顺序用:拼接回完整字符串,不会丢失任何分段内容
  • 如果你确认client_info固定只有9个分段,也可以用简化拼接写法,但不推荐生产环境使用,一旦后续字段分段数增加会丢失数据:
-- 仅适用于client_info固定9段的场景,不推荐生产环境使用
UPDATE table1
SET client_info = concat_ws(
    ':',
    split_part(client_info,':',1),
    split_part(client_info,':',2),
    split_part(client_info,':',3),
    split_part(client_info,':',4),
    split_part(client_info,':',5),
    split_part(client_info,':',6),
    split_part(client_info,':',7),
    split_part(client_info,':',8),
    Trim(split_part(client_info,':',9))
)
WHERE lm_id=122344556 AND record_id=11111;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:51:31