【问题标题】:Replace a bad date with a Null用 Null 替换错误的日期
【发布时间】:2013-07-23 22:35:00
【问题描述】:

我正在与我们的人力资源部门合作一个项目,该项目计算在特定时间段内雇用的临时工的数量。

我正在从我们的 SAP 系统以每月自动导出的方式提供的 Excel 电子表格中导入数据。 [TempHireDate] 列在不需要日期的单元格中有 00/00/0000 而不是 NULL。我想运行一个派生列,该列删除 00/00/0000 并在将其导入表时将其替换为 NULL 值。

我相信派生列是答案,但我很难让任何标准表达式起作用。我认为 REPLACE 表达式会起作用,但我认为我做得不对。

替换(00/00/0000,[TempHireDate],NULL)

我进行了搜索并找到了一些其他示例,但也无法使它们起作用。

(Date_To_Check == "00/00/0000" || (DT_Date)Date_To_Check

ISNULL([第 0 列]) || LEN(TRIM((DT_WSTR,10)[Column 0])) == 0 || [Column 0]==”00/00/0000” NULL(DT_DATE) : (DT_DBDATE)((DT_WSTR,10)[Column 0])

两者都不起作用,我再次认为我做错了什么。

是否有人对我可以做什么或如何使这些表达式起作用有任何建议?

【问题讨论】:

  • 您是在 Excel 还是 SQL 代码中执行此操作? CASE WHEN DT_DATE = '00/00/0000' THEN NULL ELSE DT_DATE END
  • 我正在从 Excel 导入到 SQL 临时表。我已经有一个包,其中有一些派生列进行转换。我只需要添加这个转换,就可以得到 HR 想要看到的新计数。我去了源头,但这个日期列在主 (SAP) 系统中是硬编码的,无法更改。因此,我唯一的解决方案是在将数据导入临时表时去掉 00/00/0000。
  • 您可以在导入数据后对表运行更新:UPDATE staging_table SET TempHireDate = NULL where TempHireDate = '00/00/0000'
  • 我认为您使用 REPLACE 的方法是正确的,但它可能应该是 REPLACE([TempHireDate],"00/00/0000",NULL),但这仅适用于特定的数据类型WSTR。你也可以试试 TempHireDate== "00/00/0000"? NULL(DT_WSTR):TempHireDate。无论如何,您必须牢记您拥有的数据类型是否与您正在使用的功能兼容。
  • 上述表达式均无效。我仔细检查了导入,列数据类型是 DT_WSTR。我想使用 Derived 列的原因是因为它需要每个月都是一个自动化的过程。一旦它开始运行,他们不希望任何人触摸它。我认为 Derived 列将是完成此任务的最简单方法。

标签: sql ssis expression


【解决方案1】:

添加为新列

[TempHireDate] == "00/00/0000" ? NULL(DT_WSTR,10) : [TempHireDate]

【讨论】:

    【解决方案2】:
    SELECT NullIf(TempHireDate, '00/00/0000')
    FROM   your_table
    

    【讨论】:

    • 我需要它作为派生列的表达式。
    • 您上面的 cmets 说您正在导入 SQL 临时表。将计算列添加到该暂存表中,或者简单地使用 SQL 语句作为包含此计算列的转换的源。
    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2021-11-20
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多