|ERROR|ERROR: missing data for column "createtime" (seg3 slice1 192.168.66.23:40001 pid=

2018-08-27 16:34:59 浏览数 (1)

1、最近的kettle的数据交换配置,启动kettle引起的错误,如下所示:

代码语言:javascript复制
1 |ERROR|ERROR:  missing data for column "createtime"  (seg3 slice1 192.168.66.23:40001 pid=33370)

引发这个错误,并不是这个字段引起的错误,一般是这个字段临近的字段存在空格或者换行符引发的错误。

2、引发这个错误,并不是这个字段引起的错误,一般是这个字段临近的字段存在空格或者换行符引发的错误。为了问题重现,我新建一个数据库和数据表:

3、准备插入的正常数据,可以执行多条插入数据:

代码语言:javascript复制
1 insert into user(name,age,birthday,sex) VALUES("张三",22,"2018-08-20","男");
2 insert into user(name,age,birthday,sex) VALUES("李四",21,"2018-8-20","男");
3 insert into user(name,age,birthday,sex) VALUES("王五",18,"2018-8-20","男");
4 insert into user(name,age,birthday,sex) VALUES("赵六",19,"2018-8-20","男");
5 insert into user(name,age,birthday,sex) VALUES("李白",20,"2018-8-20","男");
6 insert into user(name,age,birthday,sex) VALUES("安琪拉",43,"2018-8-20","女");
7 insert into user(name,age,birthday,sex) VALUES("亚瑟",32,"2018-8-20","男");
8 insert into user(name,age,birthday,sex) VALUES("鲁班",14,"2018-8-20","男");

然后执行查询结果是没有查询结果的:

CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。

4、然后插入一条换行的数据:

换行的数据可以如下所示造几条,这里造一条。

然后执行

insert into user(name,age,birthday,sex) VALUES("后 裔",14,"2018-8-20","男");

5、然后可以看到已经查询出来了这条换行的数据。

6、mysql函数。replace(string_expression , string_pattern , string_replacement),第一个参数:要查找的字段。第二个参数:要查找的字符。第三个参数:要替换成的字符。char(10)换行键。char(13)回车键。你会发现字段名称like 的concat里面是char(10)和char(13)都可以进行查询出结果的。

7、我要的结果就是将带有换行和回车的字符处理掉,然后执行交换。其他使用情况以后用到再贴。

8、最后说一下,这里是name的字段,本不该出现回车和换行符的,如果是其他长文本字段,可以使用如下命令:

代码语言:javascript复制
1 -- 将char(10)换行键,char(13)回车键换成@#r;和@#n;
2 select REPLACE(REPLACE(name, char(10), '@#r;'), char(13), '@#n;') as name from user where name like CONCAT("%",char(13),"%")
3 
4 -- 将@#r;和@#换成nchar(10)换行键,char(13)回车键;
5 select REPLACE(REPLACE(name, '@#r;', char(10)), '@#n;', char(13)) as name from user where name like CONCAT("%",char(13),"%")

待续......

0 人点赞