首页 > 解决方案 > DataStage Transformer 阶段如何检查显式文本是否在列的值中

问题描述

目前,我在并行作业中使用 Transformer 阶段内的 Count 函数来检查 1 个阶段变量 ( StageVar ) 的值是否包含一些显式值,然后给另一列 ( Code ) 一些值。 在StageVar

中 有很多代码要检查,但我将仅以“ D ”代码为例:

If the StageVar contains 'DEBT' (and only 'DEBT', not any other string like 'DEBTOR' or 'ODEBT', etc) in its value, the Code column for that row will have the 'D' code.

这是我在 Code 列的派生中使用的代码:

If Count(StageVar, 'DEBT') > 0 Then 'D' Else SetNull()

它成功地将代码“ D ”提供给StageVar包含“ DEBT ”字符串的行。但问题是StageVar的内容并不总是具有独立的“ DEBT ”字符串。

在某些情况下,StageVar可能包含“ DEBTOR ”,例如“PAY DEBTOR STATEMENT IN NOVEMBER”或“ ODEBT ”,例如“PAYMENT ODEBT FOR NOVEMBER”,我将忽略它们,并且不会给出代码的“ D代码柱子。

但上面的代码也给出了' D'他们的代码。你们知道如何在变形金刚阶段本身解决这个问题吗?
谢谢!

标签: datastage

解决方案


确保 StageVar 具有前导空格和尾随空格。例如" NATIONAL DEBT IS OUT OF CONTROL " ,您可以使用 Count() 函数,但 Index() 可能更符合您的要求。还将您的搜索字符串包含在空格字符中。

If Count(StageVar, " DEBT ") > 0 Then "D" Else SetNull()

If Index(StageVar, " DEBT ", 1) > 0 Then "D" Else SetNull()

Index() 在找到第一个匹配项后立即停止搜索。Count() 必须强制搜索到 StageVar 的末尾。


推荐阅读