我有一列字符串,如下所示:
目标主机: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只有函数不能成为解决方案的一部分,谢谢!)
提前感谢您的帮助。
答案 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), " ")
)