如何在ssis中将空白转换为null

Posted

技术标签:

【中文标题】如何在ssis中将空白转换为null【英文标题】:How to convert blank into null in ssis 【发布时间】:2012-10-14 17:32:12 【问题描述】:

我正在从ssis 的excel 中提取数据。 excel 列之一包含blank 值。所以我需要用 null 替换 blank 值,否则我的包会失败。 有什么建议吗?

【问题讨论】:

【参考方案1】:

你有没有尝试过类似的东西(假设数据类型是字符串/varchar):

LEN(TRIM([ColumnName]))==0 ? NULL(DT_WSTR, 10) : [ColumnName] 

【讨论】:

我已经尝试过了,但它不是字符串,它是日期,我们不能使用 ltrim 作为日期...... :( 这确实有效。尽管数据类型显示为字符串 [DT_STR],但我正在使用 DT_STR 并且失败了。【参考方案2】:

在 DataFlow 中使用 DerivedColumn 组件。

替换你的列并在表达式中输入这行代码

ColumnName == "" ? NULL(DT_WSTR,50) : ColumnName

如果列为空,它将确保返回 null

【讨论】:

我们可以在没有派生列的情况下使用这个表达式吗? 我们可以在一行中多次替换同一列而不使用另一个 DerivedColumn 或更复杂的公式吗?【参考方案3】:

您可能还想选中在源连接和目标连接上保留 Null 值的选项(如果可用)

【讨论】:

这不是重点!重点是如何处理或替换 NULL 值。我已经尝试过你的建议,但它不起作用。应该有 Expression 用 NULL 或用户定义的值替换 Empty 值。 好吧,我想你是对的。如果这是一个平面文件,平面文件源上有一个选项可以保留空值。启用此功能以及目标连接(如 OLEDB)上的“保留 NULL 值”选项可能会消除使用派生列转换替换它的需要。 嗯!好吧,我有 Excel 作为来源。 Excel 包含一些空单元格,当我将它们加载到 DB 中时,它给出了 NULL。我曾尝试使用表达式(条件拆分),但它不起作用。我会尽快粘贴我的错误。 如果我们只在数据字段中有“”,这将永远无法工作。【参考方案4】:

我有一个类似的实例,我想将日期列中的字符串替换为 NULL,我使用了以下代码:

LEN(your_data)

在这种情况下,字符串的长度只有 1。然后我使用数据转换转换将其转换为 dt_dbtimestamp 类型。

希望有帮助!

【讨论】:

【参考方案5】:

修复上述问题 :::::

必须使用允许空值选项检查源和目标,它将起作用。

【讨论】:

在我的情况下,我使用的是平面文件源,左侧“连接管理器”下的选项是一个复选框“将源中的空值保留为数据流中的空值”跨度> 【参考方案6】:

您应该使用派生列组件和条件表达式。由于这是一个条件语句,数据类型需要相同才能创建布尔结果。

试试这个:

ColumnName == (DT_DATE)"" ? NULL(DT_DATE) : ColumnName

【讨论】:

以上是关于如何在ssis中将空白转换为null的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SSIS 中将 Y2K 日期转换为 SQL 日期?

在 SQL SERVER 2012 中将 NULL 转换为空白

使用SSIS从SQL Server 2005中的平面文件导入时如何保留NULL值

如何在 hive 中将列的空白值替换为 [null] 以计算 SUM

在 SSIS 中将 varchar 数据类型转换为日期时间

在 SQL Server 中将值分配给类似列后,使用 SSIS 将 Oracle 表列更新为 Null