0

我正在导出一个将被另一个系统拾取的文件。为了避免在其他系统中返工,我试图完全匹配现有的 excel csv 输出。我在数据库中有一个日期列,我想将其导出为 dd/mm/yyy。在数据流任务中,我将以下 SQL 作为进行适当转换的源。如果我在 ssms 中运行此查询,我会得到正确的输出。

SELECT [Code]
      ,[Agency_Name]
      ,[Region_Group]
      ,CONVERT( varchar(20), [GrossAmtYrly] , 1) GrossAmtYrly
      ,CONVERT ( varchar(20), [SaleDate] , 103) SaleDate
      ,[MemberNo]
      ,[Surname]
      ,[Scale]
  FROM [Land].[Sales]

然后我将它链接到一个平面文件目标,它映射到的列设置为 DT_SR 宽度 20 不是文本限定的。

但输出文件以 yyyy-mm-dd 格式输出日期。

同样对于grossamtyrly,旧的excel生成的csv在每3位数字后面都有逗号,用“包裹。它映射到的输出列是DT_SR宽度20,文本限定为真。

该列的输出文件缺少 Grossamtyrly 的逗号。

所以看起来我在 SQL 中的转换被完全忽略了,但我不知道为什么。

在此先感谢您的任何建议!

使用 SSIS 2012 - Visual Basic 2010,DB 是 SQL Server 2012

4

2 回答 2

1

我会在数据流中使用派生列将其转换为您想要的格式。如果它以 yyyy-mm-dd 格式作为文本字段输入,您可以使用以下表达式将其转换为 dd/mm/yyyy:

SUBSTRING(dt,9,2) + "//" + SUBSTRING(dt,6,2) + "//" + SUBSTRING(dt,1,4)
于 2015-03-04T05:23:33.163 回答
1

感谢保管人,我知道如何让它工作。

我双击任务之间的流向箭头,元数据选项卡显示每列的数据类型。当我第一次设置它时,我将访问模式设置为表或视图,因此日期和总时间设置为 DT_DATE 和 DT_CY,所以我认为 SSIS 隐含地将列再次转换回其原始类型。

现在我不知道如何更改它们,所以我删除了数据库源并从 SQL 命令选项开始重新创建它,一切都按预期工作。

于 2015-03-04T05:28:16.907 回答