首页 > 解决方案 > 如何将csv文件中的日期转换为整数

问题描述

我必须将数据从 csv 发送到 SQL DB。当我尝试将数据转换为 Int 时,问题就开始了。这不是我的主意,我真的不能用这种数据类型做很多事情。当我试图解决这个问题时:

数据转换2:将列“pr_czas”(387) 转换为列“C pr_dCz_id”(14) 时数据转换失败。转换返回状态值 2 和状态文本“由于可能丢失数据,无法转换该值。”。

已经尝试忽略这个问题,但后来又出现了另一个问题,所以除了解决这个问题别无他法。

我必须将此数据从 str 50 的 csv 文件转换为 int 4

它必须是 int4。要求之一 不知道该怎么做。

这是我试图放入 int4 的数据。看看pr_czas 这是数据的外观

这是数据的数据类型在此处输入图像描述

在我尝试只用 DD.MM.YYYY 做同样的事情但得到相同的结果之前......

标签: ssis

解决方案


给定一个名为 [pr_czas] 的输入列,其中包含看起来像是31.01.2020 00:00以“DD.mm.YYYY HH:MM”格式表示的格式化日期时间的字符串值,我想将其表示为整数 DDMMYYHHMM

将派生列添加到您的数据流并调用它 new_pr_czas

我将使用的逻辑是一系列 REPLACE 语句并将最终结果转换为整数。替换句点,替换冒号和空格 - 什么都没有

(DT_I8)REPLACE(REPLACE(REPLACE([pr_czas], ".", ""), ":", ""), " ", "")

这是一个简单的案例,但需要注意的事项。

integer/int32/I4 的最大值为 20 亿。310120200000 太大而无法放入该空间,因此您需要将其设为 bigint/int64/I8。如果我记得您之前的问题,那么您在查找任务时遇到了麻烦,因此这种数据类型不匹配可能会伤害您。

要注意的另一件事是,前导零在转换为数字时将被丢弃,因为它们不重要。如果您需要保留前导零,那么您正在使用字符串数据类型。这是使用 ISO 标准的一个优势,但是如果您的数据需要 DD,那么我就不能这么说。

如果您需要将日期分割成另一种格式,那么您将需要一些派生列。第一个将为每个 pr_czas 生成一个字符串列 - 年、月、日、小时和分钟。您将为此使用 substring 方法并使用 findstring 来查找句点空格和冒号。下一个数据流将用于将这些字符串片段重新转换为新格式并将其转换为 I8。为什么?因为您无法一次性调试所有操作,但您可以在两个派生列之间放置一个数据查看器,以找出切片出错的位置。


推荐阅读