Teradata中更新列值替换特定字符的问题求助
Teradata UPDATE语句未生效的排查与解决
可能的原因及排查步骤
WHERE条件过滤了所有待更新行
原语句的WHERE ORDER_INFO NOT LIKE '%~%' AND CTP_SESSION_ID IS NULL未筛选出包含%的行,且LIKE中未对%转义(%是Teradata LIKE的通配符,直接写'%%%'无法匹配实际的%字符)。先执行以下查询验证是否存在需要更新的行:
SELECT ORDER_INFO, CTP_SESSION_ID FROM A WHERE ORDER_INFO LIKE '%\%%' ESCAPE '\' -- 匹配包含实际%符号的行 AND CTP_SESSION_ID IS NULL AND ORDER_INFO NOT LIKE '%~%';如果返回0行,说明要么
CTP_SESSION_ID不为NULL,要么ORDER_INFO中没有%,要么已经包含~,需要核对数据后调整WHERE条件。未提交事务
部分Teradata客户端默认不会自动提交事务,执行UPDATE后需要手动执行COMMIT;才能生效。数据类型影响
如果ORDER_INFO是CHAR类型,字段末尾可能存在填充空格,导致替换结果看起来未生效。可以用TRIM处理后再替换:UPDATE A SET ORDER_INFO = OREPLACE(TRIM(ORDER_INFO), '%', '~') WHERE TRIM(ORDER_INFO) LIKE '%\%%' ESCAPE '\' AND CTP_SESSION_ID IS NULL AND TRIM(ORDER_INFO) NOT LIKE '%~%';
修正后的UPDATE语句
UPDATE A SET ORDER_INFO = OREPLACE(ORDER_INFO, '%', '~') WHERE ORDER_INFO LIKE '%\%%' ESCAPE '\' -- 精准匹配含%的行 AND CTP_SESSION_ID IS NULL AND ORDER_INFO NOT LIKE '%~%';
执行后记得提交事务(若客户端未自动提交):
COMMIT;
内容的提问来源于stack exchange,提问作者Debasis Das
相关产品推荐
相关产品推荐

