如何使用Talend将Excel的数值date值转换为适合存储在数据库表中的date

我有一个csv文件,有一些列的格式,如date,string,数字。

我知道Excel将所有的date存储为数字,所使用的单元格格式是什么使得它显示为dd / mm / yyyy或yyyy-mm等。

我的问题是我有一个在Excel中的csv文件中的列,我需要使用talend将其从数字转换为我可以存储在数据库中的date值。

我一直无法find一个组件或function,这将帮助我做到这一点,但在我试图自己用代码解决它之前,我想看看其他人是否知道使用Talend Open Studio进行数据集成的更好方法?

  • TalendDate.parseDate("yyyy-MM-dd HH:mm:ss")

在tmap的date列的输出csv文件中。

Excel将date和时间存储为表示自1900年1月 – 0日以来的天数加上24小时天的一小部分的数字:ddddd.tttttt数字的整数部分ddddd表示自1900年以来的天数 – 扬0。 例如,2000年1月19日的date为36,544,自1900年1月1日以来已有36,544天。 数字1表示1900年1月1日。 数字的小数部分ttttt表示24小时一天中的小数部分。 例如,上午6:00存储为0.25,即24小时的25%。 同样,6PM的存储时间为0.75,即24小时的75%。

所以你可以使用像tJavaRow这样的用户代码组件或使用静态例程来将这个数字转换为date,或者使Excel以date格式打印到csv文件中,这样做会更好(如果可能的话),只需select单元格或列,并在主页选项卡中更改其数字格式,默认设置为“标准”。

ref: excel如何存储date

你可以用它来使date成为一个string

  =DAY(B2)&"/"&MONTH((B2))&"/"&YEAR((B2)) 

为了其他人寻找一个简单的答案,这是我在这些情况下做的:

 IF(LOCATE('/', Date_of_Birth) > 0 , STR_TO_DATE(Date_of_Birth, '%m/%d/%Y'), DATE_ADD('1900-01-01', INTERVAL b.Date_Of_Birth-2 DAY)) 

此示例来自具有不同typesdate的源表。 有些格式为“01/01/2001”,有些格式为01/00/1900以后的Excel格式。 我用IF语句分别处理它们,DATE_ADD部分指向Excel位。