问题描述
我几乎是 Webi BO 的新手。我需要从字符串中提取数字。字符串如下所示: X Y Z 其中 x 是可变长度文本,Y 是需要提取的数字(长度也可以变化 0、00 或 000 或 0.00、00.00 或 000.0,...而 Z 是 5 个字符的固定长度文本。
字符串示例:
sodium chloride 0.9% + Potassium chloride 50 mL/hr
x 是氯化钠 0.9% + 氯化钾 Y 是 50 Z 为毫升/小时
需要提取Y的值。有什么公式可以帮助解决这个问题吗? 谢谢。
解决方法
这在 Web Intelligence 本身是不可能的。由于 X 的长度是可变的,而 Z 是固定的长度,所以解决这个问题的唯一方法是寻找 Y 前面的那个空间如果我们反转字符串是可能的。但是,WebI 中没有反向功能。您可以在您的 Universe 中或在自由编写的 SQL 中执行此操作吗?
这就是它在 SQL Server 中的样子...
DECLARE @MyString VARCHAR(100);
DECLARE @Length INT;
DECLARE @Y_Index INT;
DECLARE @Y_Length INT;
DECLARE @Z_Index INT;
SET @MyString = 'sodium chloride 0.9% + Potassium chloride 50 mL/hr';
-- get total string length
sET @Length = LEN(@MyString);
-- find index (starting position) of Y
SET @Y_Index = @Length - CHARINDEX(' ',REVERSE(@MyString),7) + 2;
-- find index (starting position) of Z
SET @Z_Index = @Length - CHARINDEX(' ',REVERSE(@MyString)) + 2;
SELECT
@MyString AS [MyString],REVERSE(@MyString) AS [MyStringReversed],@Length AS [MyStringLength],@Y_Index AS [Y Index],@Z_Index AS [Z Index],RTRIM(SUBSTRING(@MyString,@Y_Index,@Z_Index - @Y_Index)) AS [Y];
这是一个 link 看到它在行动。