用于将字符串拆分为多个值的 ESQL
ESQL for splitting a string into mulitple values
下面的输入xml字段需要被子字符串化为6个字符,每6个字符应该被拆分并保存在输出的选项字段中。
Input:
<feature>124414500045563879</feature>
output:
<option>124414</option>
<option>500045</option>
<option>563879</option>
IIB ESQL 中是否有可用的分词器函数来实现上述结果。
据我所知,在 ESQL 中没有 String Tokenizer 函数。
但是您可以使用以下过程作为基础来实现您的目标。该方法将Delim上的S拆分为Env中的数组(Environment.Split.Array[])
并在重新填充之前删除 Environment.Split。
在你的情况下,你不需要 Delim,你应该在 Substring 部分使用固定长度。
CREATE PROCEDURE Split (IN S CHARACTER, IN Env REFERENCE, IN Delim CHARACTER)
BEGIN
DECLARE P INTEGER;
DECLARE Idx INTEGER 1;
SET Env.Split = NULL;
REPEAT
SET P = POSITION(Delim IN S);
IF P = 0 THEN
SET Env.Split.Array[Idx] = S;
ELSE
SET Env.Split.Array[Idx] = LEFT(S, P - 1);
SET S = SUBSTRING(S FROM P + LENGTH(Delim));
SET Idx = Idx + 1;
END IF;
UNTIL P = 0
END REPEAT;
END;
另一种解决方案可能是将特征的值作为比特流,从中构建一个新的 BLOB 消息,并使用描述该值中标记的消息定义重新解析它。重新解析后,可以进一步处理新的逻辑消息。
下面的输入xml字段需要被子字符串化为6个字符,每6个字符应该被拆分并保存在输出的选项字段中。
Input:
<feature>124414500045563879</feature>
output:
<option>124414</option>
<option>500045</option>
<option>563879</option>
IIB ESQL 中是否有可用的分词器函数来实现上述结果。
据我所知,在 ESQL 中没有 String Tokenizer 函数。
但是您可以使用以下过程作为基础来实现您的目标。该方法将Delim上的S拆分为Env中的数组(Environment.Split.Array[]) 并在重新填充之前删除 Environment.Split。
在你的情况下,你不需要 Delim,你应该在 Substring 部分使用固定长度。
CREATE PROCEDURE Split (IN S CHARACTER, IN Env REFERENCE, IN Delim CHARACTER)
BEGIN
DECLARE P INTEGER;
DECLARE Idx INTEGER 1;
SET Env.Split = NULL;
REPEAT
SET P = POSITION(Delim IN S);
IF P = 0 THEN
SET Env.Split.Array[Idx] = S;
ELSE
SET Env.Split.Array[Idx] = LEFT(S, P - 1);
SET S = SUBSTRING(S FROM P + LENGTH(Delim));
SET Idx = Idx + 1;
END IF;
UNTIL P = 0
END REPEAT;
END;
另一种解决方案可能是将特征的值作为比特流,从中构建一个新的 BLOB 消息,并使用描述该值中标记的消息定义重新解析它。重新解析后,可以进一步处理新的逻辑消息。