【发布时间】: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