如何将 dd/mm/yyyy 中的日期值从 SSIS 保存到 Excel,其中服务器中的 TimeZone=Eastern

问题描述 投票:0回答:2

我有一个 SSIS 包,我正在运行一个存储过程并将结果集保存在控制流中的对象类型变量(作为临时变量)中,并且在数据流中我使用脚本从对象类型检索数据变量将结果集保存在 Excel 文件中。

除了日期列之外,一切正常。它应该是 dd/mm/yyyy 格式,但是无论我尝试过什么,我都无法阻止它在 Excel 中采用 m/d/yyyy 格式。

我尝试过的是:

1- 将其添加到 Excel ConnectionManager ->

Excel 12.0;HDR=Yes;IMEX=0;Readonly=False
Excel 12.0;HDR=Yes;IMEX=1;Readonly=False
的连接字符串中。两者都不起作用。

2- 添加了派生列任务,派生了一个新的“DerivedMyDate”列作为

STR
WSTR
Date
。使用此列将日期值保存在Excel文件中,其中类型设置为
STR
DATE
。我的尝试都没有成功。

3-添加了数据转换任务,尝试了我在第二步中尝试过的所有相同操作,但没有任何效果。

4- 在 Excel 中添加了虚拟第一行,其中数据列类似于

15/01/1900
。不起作用,它正在下面添加其他行,其中日期值采用
m/d/yyyy
格式。

检查了这些页面,答案对我不起作用: 使用 SSIS for Excel 导入 SQL Server 的日期格式问题

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/7e34a0af-a744-4a51-b925-3284d0fba296/problem-in-date-format-while-exporting-to-excel-destination-来自 ssis 中的平面文件源?forum=sqlintegrationservices

我电脑的时区:(UTC-05:00) 东部时间(美国和加拿大),无法更改此设置。

如有任何帮助或建议,我们将不胜感激。

sql sql-server excel ssis sql-server-2012
2个回答
1
投票

我将尝试在下一个解决方案中为您建议稍微修改一下 T-SQL 查询。
在从存储过程中提取数据的步骤中,如果此返回的列不多,您应该声明一个表变量,其名称、类型和列数与您的存储过程列相适应,例如

@var
。然后你需要将执行的存储过程结果传递到变量中,

INSERT INTO @VAR
EXEC sp_your_stored_prodedure

在最后一步,您应该不从存储过程中检索数据,而是从

@var
检索数据,并使用日期格式为 103 的
CONVERT
T-SQL 函数在 select 语句中添加新字段:

SELECT
      v.*
      ,CONVERT (NVARCHAR, v.date_field, 103) as target_date_format
FROM @var AS v

此后,您可以以适当的格式使用此数据流和日期。


0
投票

虽然这是一个较旧的主题,但我想分享我的经验和解决方案,它可能会对某人有所帮助。

在我的例子中,我从源 SQL 表中读取数据,然后使用我的 SSIS 包将其导出到 Excel 文件中。它以 2023-12-07 的格式显示,但我希望它的格式为 12/07/2023。

为此,在我的 SP/Sql 脚本中,我使用以下查询提取以所需格式格式化的数据:

select format(convert(date,a.[DOB]),'MM/dd/yyyy') as DOB from src_table

然后在我的 SSIS 包 OLEDB_Source 中,我将列类型更改为:

enter image description here

这解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.