使用 LPAD 和 RPAD 时,Teradata table 创建和 select 语句失败

Teradata table creation and select statements fail when using LPAD and RPAD

背景:我正在处理的应用程序没有使用任何字符定界符。字段是固定长度的。字母数字字段必须左对齐并 space 填充到右侧,数字字段必须右对齐并在左侧填充零。

我一直在尝试使用 RPAD 和 LPAD 功能来完成此操作。我 运行 遇到的问题是 Teradata 显示的错误 "Response Row size or Constant Row size overflow"。每条记录为 4000 字节,并且(根据我所读)Teradata 中每条记录的最大大小为 64KB,因此我远远低于 Teradata 允许的最大长度。

这是生成错误的一小部分代码示例;

SELECT
    RPAD(t1.MemberNbr, 20, ' ') AS MemberNbr
    ,RPAD(t1.LastName, 35, ' ') AS LastName
    ,RPAD(t1.FirstName, 25, ' ') AS FirstName
,CAST(t1.B_Day AS DATE FORMAT 'YYYYMMDD') (char(8)) AS BirthDay
FROM someTable AS t1

任何人都可以向我解释为什么这不起作用吗?谢谢

当您检查结果数据类型 (SELECT TYPE(RPAD(t1.MemberNbr, 20, ' '))) 时,您会注意到它是 VARCHAR(32000) CHARACTER SET UNICODEVARCHAR(64000) CHARACTER SET LATIN,您需要使用转换来减少它:

CAST(RPAD(t1.MemberNbr, 20, ' ') AS CHAR(20))

我知道这很愚蠢,但是 RPADLPAD 不是内置函数而是 FastPath UDF,因此 parser/optimizer 似乎不知道实际结果大小(否则对于其他 UDF 没问题,例如 LTRIM/RTRIM