如何使用子字符串和位置函数从句子中提取字符串?

How to extract string from sentence using sub-string and position function?

我必须从字符串中提取一个值,并且我正在处理不支持正则表达式的 cognos 应用程序。它有一些内置函数,如 substringposition

我的字符串类似于

/content/folder[@name='ab_Salary Reports']/folder[@name='INT Salary Reports']/folder[@name='INT Sal Sche']/jobDefinition[@name='Salary Rep R025']

而且我必须提取 Salary Rep R025,即。姓氏值。 静态子字符串将不起作用,因为字符串是可变的。

使用位置函数定位目标子串的起点和终点。尝试

position('/jobDefinition', [pathstring])

结合子串:

substring( [pathstring], position('/jobDefinition', [pathstring]) + 22, length([pathstring]) - position('/jobDefinition', [pathstring]) + 22)

这将从它找到 /jobDefinition 的位置之后的 22 个字符开始,这意味着它将从刚刚经过“/jobDefinition[@name=”'开始,并将继续处理字符串的剩余长度,该长度是通过减去起点确定的来自全长。

您可能需要调整 +1 或 -1 以包含或排除您的引述。

另请注意,这是使用 Report Studio 函数。 Cognos 报告的来源是对表的查询,因此您可能拥有可用的本机功能,具体取决于您的来源。例如,我使用的大部分报表都来自 Oracle 数据库,因此我可以使用 Oracle 字符串函数而不是 Report Studio 函数。它们工作得更好,并且在数据库端处理,而不是在 Cognos Dispatcher 上处理,后者总是更快。