返回字符串中第5个空格和第6个空格之间的字符串

问题描述 投票:3回答:4

我有一列看起来像这样的字符串:

目标主机:dcmxxxxxxc032.erc.nam.fm.com目标名称:dxxxxxxgsc047.erc.nam.fm.com文件系统/ u01具有4.98%的可用空间-低于警告(20)或严重(5)阈值。

列名称为[描述]

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

该数据的唯一一致性是,所需的字符串出现在字符串中出现的空格的第5次和第6次之间,并且在短语“目标名称:”之后,子字符串的长度有所不同,但始终以另一个结尾“”,因此我尝试在第5和第6个空格之间获取子字符串。

我尝试过

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

但是那不起作用。

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

谢谢您的帮助。

substring tableau
4个回答
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之前,您必须使用类似于您尝试过的字符串操作方法,只需要非常小心地进行算术运算并提供正确的参数(MID中的第三个参数为length ,而不是结束字符的index,因此我们需要减去开始字符的索引):

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

2
投票

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

[开始]:

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

[end]:

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

最后是您需要的:

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

这应该做。如果您想采用第五种方法和第六种方法,我建议您在第六种之前找到每种方法。

[第一]:

FIND([Description], " ")

[第二]:

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

依此类推。然后:

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

0
投票

我不了解Tableau,但也许像这样吗?

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

0
投票

一个简单的解决方案-

SPLIT( [Description], " ", 3 )

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

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

© www.soinside.com 2019 - 2024. All rights reserved.