【问题标题】:ssis derived column - check if date field is nullssis 派生列 - 检查日期字段是否为空
【发布时间】:2020-02-07 14:52:51
【问题描述】:

在 SSIS 派生列中,我需要检查日期字段是否为空或 null,我正在使用此表达式但出现错误:

TRIM([date field]) == "" ? NULL(DT_DATE) : TRIM([date field])

该字段是DT_DATE 数据类型。这有什么问题?

我已经成功地使用过这样的表达方式:

TRIM(String_field) == "" ? NULL(DT_WSTR,255) : TRIM(String_field)

【问题讨论】:

  • 你得到什么错误?

标签: sql-server ssis null etl derived-column


【解决方案1】:

您正在组合数据类型(如果 true 是日期,false 是字符串)。

这是正确的公式:

TRIM([date field]) == "" ? NULL(DT_DATE) : (DT_DATE)TRIM([date field])

我假设 [日期字段] 是一个字符串。

【讨论】:

  • 如果 [日期字段] 是 dt_date 怎么办?
  • @marko 注意这个表达式不处理空值。
  • @marko --> 如果 [date field] 是一个日期,那么你的两个测试都失败了。 TRIM() 以及 = ""
  • 如果字段包含NULL,这个解决方案会抛出异常
【解决方案2】:

关于错误,它与派生列结果数据类型有关,因为在条件运算符 (?:) 中,true 和 false 表达式必须生成相同的数据类型。

此外,您的表达式不检查 NULL 值,您应该使用以下表达式:

TRIM(REPLACENULL([date field],"")) == "" ? NULL(DT_DATE) : (DT_DATE)TRIM([date field])

另外,您必须确保 [日期字段] 可以解析为日期,因此(DT_DATE)TRIM([date field]) 不会抛出异常,您可以使用错误输出来处理不包含有效日期的值。

【讨论】:

    猜你喜欢
    • 2018-12-04
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2011-02-27
    • 2011-11-08
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多