2012-05-21 80 views
1

我有一个输入文件,必须每天加载到我的表中。我以以下格式样本sample_20120518_160754.CSV接收文件。时间戳可能会有所不同,它不是当前时间戳如何在ssis中获取具有时间戳的文件名

我已经使用表达式来获取文件名以及日期,但是如何获取文件的时间戳。

这是我用来获取文件日期的表达式。

"sample_" + RIGHT("0" + (DT_STR,4,1252)DATEPART("yyyy", (DT_DATE)@[User::p_varAsOfDate]), 4) + RIGHT("0" + (DT_STR, 2, 1252)DATEPART("dd", (DT_DATE)@[User::p_varAsOfDate]), 2) + (DT_STR, 2, 1252)DATEPART("mm", (DT_DATE)@[User::p_varAsOfDate]) +"_" +".CSV" 

这种表达yeilds导致

sample_2012145_.CSV现在我想要的文件也时间戳。

回答

3

下面是给出datepart +时间部分的表达式。您可以在其中添加额外的分隔符来完成所需的格式。

(DT_STR, 4, 1252)DATEPART("yyyy", @[System::ContainerStartTime]) + 
RIGHT("0" + (DT_STR, 2, 1252)DATEPART("mm", @[System::ContainerStartTime]), 2) + 
RIGHT("0" + (DT_STR, 2, 1252)DATEPART("dd", @[System::ContainerStartTime]), 2) + 
RIGHT("0" + (DT_STR, 2, 1252)DATEPART("hh", @[System::ContainerStartTime]), 2) + 
RIGHT("0" + (DT_STR, 2, 1252)DATEPART("mi", @[System::ContainerStartTime]), 2) + 
RIGHT("0" + (DT_STR, 2, 1252)DATEPART("ss", @[System::ContainerStartTime]), 2) + 

您可以编辑上面的表达和使用您选择的另一个变量。我选择了ContainerStartTime是因为它的轻松。

+0

嗨拉吉夫,我试图用这种表达,但这种表达yeilds当前时间戳。我可以在6号早上收回文件,我在下午2号加载文件。所以在这种情况下它不起作用。 – user1348424

+0

你究竟想达到什么目的?你想从CSV文件中提取数据吗?为什么你构建表达式来提取日期和时间? sample_2012145_.CSV看起来不错,“2012145”没有任何意义。 – rvphx

+0

我每天都会收到文件,而我的文件名是sample_yyyyddmm_hhmmss.csv格式。因此,我将Asofdate作为输入varibale传递。这是我用来获取文件名“sample_”+ RIGHT(“0”+(DT_STR,4,1252)DATEPART(“yyyy”,(DT_DATE)@ [User :: (DT_STR,2,1252)DATEPART(“mm”,(DT_DATE)@ [User :: p_varAsOfDate]),2)+(DT_STR,2,1252)DATEPART((p_varAsOfDate)]),4)+ RIGHT “dd”,(DT_DATE)@ [User :: p_varAsOfDate])+“.CSV” – user1348424

2

@[User::miFilePath]+"AnyName"+"_"+(DT_WSTR, 04) YEAR(GETDATE())+(MONTH(GETDATE())>=10 ? (DT_WSTR, 02)MONTH(GETDATE()): "0"+(DT_WSTR, 02)MONTH(GETDATE()))+ (DAY(GETDATE())>=10? (DT_WSTR, 02)DAY(GETDATE()): "0"+(DT_WSTR, 02)DAY(GETDATE()))+"_"+RIGHT("0" + (DT_STR, 2, 1252)DATEPART("hh", GETDATE()), 2) +RIGHT("0" + (DT_STR, 2, 1252)DATEPART("mi", GETDATE()), 2) +RIGHT("0" + (DT_STR, 2, 1252)DATEPART("ss", GETDATE()), 2) + ".txt"