SSIS 不将日期和货币类型作为格式正确的字符串导出到平面文件
SSIS not exporting dates and money types to flat file as correctly formatted string
我正在导出一个将被另一个系统拾取的文件。为了避免在其他系统中返工,我试图准确匹配现有的 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]
然后我 link 将其发送到平面文件目标,将其映射到的列设置为 DT_SR 宽度 20 非文本限定。
但是输出文件以 yyyy-mm-dd 格式输出日期。
与 grossamtyrly 类似,旧的 excel 生成的 csv 的数量在每 3 位数字后用逗号分隔,包裹在 " 中。它映射到的输出列是 DT_SR 宽度 20,文本符合条件为真。
该列的输出文件缺少 grossamtyrly 的逗号。
看来我在 SQL 中的转化被完全忽略了,但我不知道为什么。
提前感谢您的任何建议!
使用 SSIS 2012 - Visual Basic 2010,数据库是 SQL Server 2012
我会在数据流中使用派生列将其转换为您想要的格式。如果它以 yyyy-mm-dd 格式的文本字段形式出现,您可以使用以下表达式将其转换为 dd/mm/yyyy:
SUBSTRING(dt,9,2) + "//" + SUBSTRING(dt,6,2) + "//" + SUBSTRING(dt,1,4)
谢谢 Custodian,我知道如何让它工作了。
我双击任务之间的流箭头,元数据选项卡显示每列的数据类型。当我第一次设置它时,我将访问模式设置为 table 或查看,因此日期和 grossamt 被设置为 DT_DATE 和 DT_CY,所以我认为 SSIS 隐含地将列再次转换回它的原始类型。
现在我不知道如何更改它们,所以我删除了数据库源并从 SQL 命令选项开始重新创建它,一切都按预期进行。
我正在导出一个将被另一个系统拾取的文件。为了避免在其他系统中返工,我试图准确匹配现有的 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]
然后我 link 将其发送到平面文件目标,将其映射到的列设置为 DT_SR 宽度 20 非文本限定。
但是输出文件以 yyyy-mm-dd 格式输出日期。
与 grossamtyrly 类似,旧的 excel 生成的 csv 的数量在每 3 位数字后用逗号分隔,包裹在 " 中。它映射到的输出列是 DT_SR 宽度 20,文本符合条件为真。
该列的输出文件缺少 grossamtyrly 的逗号。
看来我在 SQL 中的转化被完全忽略了,但我不知道为什么。
提前感谢您的任何建议!
使用 SSIS 2012 - Visual Basic 2010,数据库是 SQL Server 2012
我会在数据流中使用派生列将其转换为您想要的格式。如果它以 yyyy-mm-dd 格式的文本字段形式出现,您可以使用以下表达式将其转换为 dd/mm/yyyy:
SUBSTRING(dt,9,2) + "//" + SUBSTRING(dt,6,2) + "//" + SUBSTRING(dt,1,4)
谢谢 Custodian,我知道如何让它工作了。
我双击任务之间的流箭头,元数据选项卡显示每列的数据类型。当我第一次设置它时,我将访问模式设置为 table 或查看,因此日期和 grossamt 被设置为 DT_DATE 和 DT_CY,所以我认为 SSIS 隐含地将列再次转换回它的原始类型。
现在我不知道如何更改它们,所以我删除了数据库源并从 SQL 命令选项开始重新创建它,一切都按预期进行。