如何使用Talend将excel的数字日期值转换为适合存储在db表中的Date

时间:2015-03-22 17:49:07

标签: mysql excel date csv talend

我有一个包含多个列的csv文件,其中一些格式为日期,字符串,数字。

我知道Excel会将所有日期存储为数字,而应用的单元格格式会使其显示为dd / mm / yyyy或yyyy-mm等。

我的问题是我在csv文件中有一个来自excel的列,我需要使用talend将它从数字转换为我可以存储在数据库中的日期值。

我无法找到能够帮助我做到这一点的组件或功能,但在我尝试使用代码自己解决之前,我想看看其他人是否知道使用Talend Open Studio for Data实现它的更好方法整合?

4 个答案:

答案 0 :(得分:2)

  

Excel将日期和时间存储为一个数字,表示自1900年1月1日以来的天数,加上24小时工作日的小数部分:ddddd.tttttt   数字的整数部分ddddd表示自1900年1月1日以来的天数。例如,2000年1月19日的日期存储为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等用户代码组件或使用静态例程将此数字转换为日期,或者更好(如果可能)使Excel以日期格式将字段打印到csv文件中只需选择单元格或列并在主页选项卡中更改其数字格式,默认情况下它将设置为“标准”。

参考:how excel stores dates

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您可以使用此功能将日期设为字符串

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

答案 3 :(得分:0)

为了寻求简单答案的其他人,这就是我在这些情况下所做的事情:

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))

此示例来自具有不同日期类型的源表。有些人的格式类似于 01/01/1001'有些人使用自19/00/00以来的天数的Excel格式。我使用IF语句分别处理它们,DATE_ADD部分引用Excel位。