如何在 Talend 中使用 LIKE 运算符和上下文变量 MySQL 从数据库中删除

How to delete from database with LIKE operator and context variable MySQL in Talend

我有一个日期为字符串的数据库,我必须删除 csv 文件中与数据库中具有相同数据的行。更准确地说,我的日期看起来像这样 2018-03-31T23:30:24+00:00。我希望当它得到这样的日期时,从数据库中删除数据 LIKE %2018-03-31%,这样它将删除那天的所有记录,即使时间不同。 我有一份工作,其中 tFileInputDelimited 与 tSortRow 连接,然后连接到 tFlowToIterate。之后,我有一个 tJava,我在其中提取日期,然后是一个 tMysqlInput,其中查询具有这样的 where 子句: WHERE purchase_date LIKE '%"+context.date+"%' 。然后,使用 运行 if 连接,我有 tMysqlRow,其中我有带有相同 where 子句的 delete 语句。在那之后,当然,我有 tMysqlCommit。 context.date 是这样制作的:

context.dataaa=(String)globalMap.get("row6.purchase_date");
context.month=context.dataaa.substring(5,7);
context.year=context.dataaa.substring(0,4);
context.day=context.dataaa.substring(8,10);
context.date=context.year+"-"+context.month+"-"+context.day;

问题是,它不会从数据库中删除。我希望它逐行删除 csv 和数据库中同一天的所有记录。

问题出在单独比较完整日期的 if 语句,所以我必须只比较日期,而不是日、年和月。

在 Talend 中,您可以根据某些用途定义 Date 列的模式。

在这里,我有一个 tFileInputDelimited 列日期:

Column: date
Type : Date
pattern : "yyyy-MM-dd'T'hh:mm:ss"

这让我读取了一个值类似于 2018-03-31T23:30:24 的文件,因为在这里,该模式用于 "parse" 将文件中的 String 转换为 Date。现在,如果我们添加 LogRow 并更新此组件的架构,我们可以定义不同的模式来格式化 Date

Column: date
Type : Date
pattern : "yyyy-MM-dd"

输入:2018-03-31T23:30:24 输出:2018-03-31

知道,如果你不想玩 Schema,你可以 convert/format 一个日期到 StringTalendDate.formatDate("yyyy-MM-dd", row1.date)