返回字符串

时间:2015-04-23 22:33:57

标签: substring tableau

我有一列字符串,如下所示:

  

目标主机:dcmxxxxxxc032.erc.nam.fm.com目标名称:   dxxxxxxgsc047.erc.nam.fm.com Filesystem / u01有4.98%的可用空间    - 低于警告(20)或临界(5)阈值。

列名是[描述]

我要返回的子字符串是(dxxxxxxgsc047.erc.nam.fm.com)

此数据中唯一的一致性是所需的字符串出现在字符串中第5和第6次出现的空格“”之间,并且在短语“Target Name:”之后,子字符串的长度发生变化,但它始终以另一个“”,因此我试图抓住第五和第六空间之间的子串。

我试过了

MID([Description],((FIND([Description],"Target Name: "))+13),FIND([Description]," ",((FIND([Description],"Target Name"))+14)))

但这不起作用。

(编辑:我们使用Tableau 8.2,Tableau 9只有函数不能成为解决方案的一部分,谢谢!)

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:7)

在Tableau 9中,您可以在公式中使用正则表达式,这使任务更简单:

REGEXP_EXTRACT([Description], "Target Name: (.*?) ")

或者在Tableau 9中,您可以使用新的FINDNTH函数:

MID(
     [Description],
     FINDNTH([Description]," ", 5) + 1, 
     FINDNTH([Description]," ", 6) - FINDNTH([Description]," ", 5) - 1
   )

在使用Tableau 9之前,您必须使用类似于您尝试的字符串操作方法,只需要非常小心算术并提供正确的参数({{1}中的第三个参数} length ,而不是结束字符的 index ,所以我们需要减去起始字符的索引):

MID

答案 1 :(得分:2)

嗯,你需要找到"目标名称:"然后" "在它之后,不是那么难。为了更清楚,我将在3个字段中分割(您可以在一个字段中混合所有内容)。顺便说一句,你是在正确的方向,但MID()上的最后一个字段应该是字符串长度,而不是字符位置

[开始]:

FIND([Description],"Target name: ")+13

[结束]:

FIND([Description]," ",[start])

最后你需要的是:

MID([Description],[start]+1,[end]-[start]-1)

这应该做。如果你想追求第5和第6个" "方法,我建议你找到每个" "直到6日。

[第一]:

FIND([Description], " ")

[第二]:

FIND([Description], " ",[1st] + 1)

等等。然后:

MID([Description],[5th]+1,[6th]-[5th]-1)

答案 2 :(得分:1)

一个简单的解决方案-

SPLIT( [Description], " ", 3 )

这会从Description字符串返回一个子字符串,并使用空格定界符将字符串分成一系列标记。

  

该字符串被解释为定界符和   令牌。因此对于字符串abc-defgh-i-jkl,其中的定界符   字符为“-”,令牌为abc,defgh,i和jlk。想想这些   作为令牌1到4。SPLIT返回与   令牌编号。当令牌数为正时,将对令牌进行计数   从字符串的左端开始;当令牌号是   否定,令牌从右开始计数。 --   Tableau String Functions

答案 3 :(得分:0)

我不知道Tableau,但也许是这样的?

MID(
    MID([Description], FIND([Description],"Target Name: ") + 13, 50),
    1,
    FIND(MID([Description], FIND([Description],"Target Name: ") + 13, 50), " ")
)