2016-02-04 36 views
0

背景:我正在使用的应用程序未使用任何字符分隔符。字段是固定长度的。字母数字字段必须左对齐,空格填充到右侧,数字字段右对齐并向左填充零。使用LPAD和RPAD时,Teradata表创建和选择语句失败

我一直在试图通过使用RPAD和LPAD功能来实现这一点。我遇到的问题是Teradata显示的错误“响应行大小或恒定行大小溢出”。每条记录(如果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 

任何人都可以向我解释为什么这是行不通的?由于

回答

3

当您检查所生成的数据类型(SELECT TYPE(RPAD(t1.MemberNbr, 20, ' '))),你会发现它要么一个VARCHAR(32000) CHARACTER SET UNICODEVARCHAR(64000) CHARACTER SET LATIN,您需要使用一个投来降低它:

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

我知道这是愚蠢的,但RPAD & LPAD没有内置的函数,但FastPath UDF,因此解析器/优化器似乎并不知道实际的结果大小(否则对其他UDF可以,例如LTRIM/RTRIM

+0

啊, t知道这些字段已更改为VARCHAR(32000)。您的解决方案完美运行,所以感谢您的帮助。 –