我使用ETL工具Talend将数据从一个Netezza数据库传输到另一个数据库。当我从varchar(30)字段中提取数据并尝试将其放入新数据库的varchar(30)字段时,它会给出一个错误,说它太长了。日志显示字段末尾有空格后跟一个正方形,表示我无法弄清楚的一些字符。我附上了以下日志的屏幕截图。我已经尝试编写SQL来拉取这个字段并替换我认为的CRLF,但没有运气。当我在场上选择并获得长度时,它会有一些比你看到的更多的字符,所以有些东西,我想摆脱它。修剪不起作用。
此SQL的返回长度不会短于对列本身执行length()。有谁知道它还能是什么?
SELECT LENGTH(trim(translate(TRANSLATE(<column>, chr(13), ''), chr(10), ''))) as len_modified
请注意,日志中的最后一列(您在括号中看到一个正方形)应该显示最后检查的字符。
答案 0 :(得分:1)
将数据保存为更大的目标表大小。如果30个字符数据将其放入500个字符的表中。让它工作。然后在最长的字段上逐个字符地查看,以确定要添加的字符。使用ascii()之类的命令来确定各个字符的ascii值以及开头和结尾。很可能你在开头或结尾都会得到一些额外的角色。确定额外字符数据是什么,然后编写代码以将其删除或永不加载它以使其适合30个字符列。或者只是让目标列更长,并包含其他字符。例如,Varchar(30)变为Varchar(32)(浪费空间但不会改变数据,因为它会进入你的身边)。