【问题标题】:DataStage Transformer stage how to check if explicit text is in the column's valuesDataStage Transformer 阶段如何检查显式文本是否在列的值中
【发布时间】:2020-12-29 18:23:12
【问题描述】:

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

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.

这是我在代码列的推导中使用的代码:

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',我将忽略它并且不提供 Code 列的 'D' 代码.

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

【问题讨论】:

    标签: datastage


    【解决方案1】:

    确保 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 的末尾。

    【讨论】:

    • 谢谢您,先生,您的逻辑非常好。我按照你所说的修复了代码,它就像一个魅力。也感谢您在这种情况下使用 Index 而不是 Count 函数的建议,我一定会使用它。
    猜你喜欢
    • 1970-01-01
    • 2014-02-07
    • 2019-04-30
    • 2019-01-19
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多