0

我正在将平面文件加载到数据库表中,并且在 SSIS 派生列任务的事先帮助下,我能够将平面文件中的数据类型 STRING 的日期从 YYYY-MM-DD 转换为 MM/DD/YYYY数据库表。但是,我注意到它将日期转换为在日期的 MM 和 DD 部分中包含前导零,但是当月和日是单个数字时,我需要排除前导零,例如六月应该是“6”而不是“06”,日期应该是“1”而不是“01”。

因此,完整日期应该是,例如 2019 年 6 月 1 日,而不是 2019 年 6 月 1 日。

有没有办法让我在 SSIS 派生列中做到这一点?

如果没有,我如何在 SQL-Server 中对其进行编码?

日期表达式的派生列
  年份 SUBSTRING(DateCol, 1, 4)
  日右(DateCol,2)
  月 SUBSTRING(DateCol, 6, 2)

我使用了以下 SSIS 派生列代码:

 派生列名称:START_DATE
 派生列:替换 START_DATE
 表达式:SUBSTRING([START_DATE],6,2) + "/" + RIGHT([START_DATE],2) + "/" + SUBSTRING([START_DATE],1,4)
 数据类型:Unicode 字符串 [DT_WSTR]
 长度:50

这个问题与上一个问题不同。在最后一个问题中,日期列是数据类型 DateTime。但是在这个问题中,日期是一个字符串,当我使用派生列将日期从 YYYY-MM-DD 更改为 MM/DD/YYYY 时,它在 MM 和 DD 中保留了前导零。然后问题就变成了,不仅要更改日期格式,还要从月份和日期中删除前导零。

但是,我在 SSIS 中研究并提出了一个更好的解决方案,用于使用数据类型字符串更改日期值,因为我正在使用的数据库以该格式存储日期。

我从我的数据源任务中删除了派生列,并在控制流中添加了一个执行 SQL 任务,然后添加了以下更新语句,它不仅将格式从 YYYY-MM-DD 更改为 MM/DD/YYYY,而且还删除了月和日的前导零。我在下面的示例 SQL 中使用的 CONCAT 函数将格式从 YYYY-MM-DD 更改为 MM/DD/YYYY,而 Convert 函数将 MM 和 DD 值更改为删除任何前导零的数据类型 INT。此解决方案允许日期保留为字符串,因为这是我必须使用的表格格式。

更新 [暂存表]
设置开始日期 =
CONCAT(CONVERT(INT, SUBSTRING(START_DATE, 6,2)), '/', CONVERT(INT, RIGHT(START_DATE, 2)),'/', LEFT(START_DATE,4))

感谢大家的评论,因为它帮助我跳出框框思考并确定了这个解决方案。

4

0 回答 0