2013-03-28 128 views
1

我试图通过SSIS包在SQL Server的datetime数据类型列中插入日期值。SSIS包日期格式问题转换为年和年转换为日

在源*中。 csv文件格式为dd-mm-yy

当我手动运行SSIS包时没有错误。 .csv文件DD-MM-YY的日期格式已成功插入到DD-MM-YYYY格式的SQL服务器数据库中。

但是,当我通过SQL Server代理中的作业运行相同的包时,它会转换为不正确的日期格式,因为DAY已转换为YEAR,YEAR已转换为DAY。

例如,如果.csv文件中的日期是15-03-13(DD-MM-YY),它将被插入为13-03-2015

试图在数据库中以正确格式获取日期,但都是徒劳的。

请建议如何解决此问题。

在此先感谢。

+1

重新说明问题:平面文件源,数据格式为dd-mm-yy。您导入时,日期被解析为dd-mm-yy(期望)。当通过SQL代理执行时,日期被解析为yy-mm-dd。如果这是准确的,它就像是一个本地化问题。如果您将RDC放入服务器并手动执行包,则使用何种格式? 'dtexec.exe/file myPackage.dtsx' – billinkc 2013-03-28 12:15:28

+0

@billinkc我会说同样的。检查您的系统朝向SQL数据库本地化设置。 – 2013-05-10 09:31:39

回答

0

示例如何做到这一点,示例数据:

enter image description here

  1. 你需要列转换为字符串:

enter image description here

2.然后转换到SQL女士日期格式:

enter image description here

3.Derived列代码:

SUBSTRING([Copy of Datee],7,2) + "-" + SUBSTRING([Copy of Datee],4,2) + "-" + SUBSTRING([Copy of Datee],1,2)

(DT_DATE)(SUBSTRING([Copy of Datee],7,2) + "-" + SUBSTRING([Copy of Datee],4,2) + "-" + SUBSTRING([Copy of Datee],1,2))

结果:

enter image description here

0

在派生列,你必须写:

DateReceived == "" ? NULL(DT_DATE) : (DT_DATE)((LEN(RTRIM(DateReceived)) == 10 ? SUBSTRING(DateReceived,7,4) : ("20" + SUBSTRING(DateReceived,7,2))) + "-" + SUBSTRING(DateReceived,4,2) + "-" + SUBSTRING(DateReceived,1,2)) 
相关问题