在DB2SQL中选择子字符串直至指定字符

在DB2SQL中选择子字符串直至指定字符,sql,db2,Sql,Db2,我需要从单个字符串中得到三个子字符串。 例如,如果字符串是abc def ghi,我需要选择abc作为1列,def作为第2列,ghi作为第3列。您可以使用该函数定位字符串中的字符,然后使用该函数从字符串中检索零件。这可以从匿名块或存储过程中完成 将其放入函数UDF中: set index = posstr(string, '-'); if (index <> 0) then -- Recursive case set pre = substr(string, index-1);

我需要从单个字符串中得到三个子字符串。 例如,如果字符串是abc def ghi,我需要选择abc作为1列,def作为第2列,ghi作为第3列。

您可以使用该函数定位字符串中的字符,然后使用该函数从字符串中检索零件。这可以从匿名块或存储过程中完成

将其放入函数UDF中:

set index = posstr(string, '-');
if (index <> 0) then -- Recursive case
 set pre = substr(string, index-1);
 set pos = substr(string, index+1);
else -- Base case
 set pre = substr(string, index-1);
end if;

根据逻辑,您可以在临时表中插入这些值并返回结果集。

我使用Locate命令和substr将字符串拆分为两个或多个子字符串,其基础是总字符串的长度以及子字符串的总长度为30,每个子字符串的长度不同。我需要根据字符串中的字符“-”进行选择好的,这意味着您需要按“-”拆分为三个字符。请举例说明单词的外观。单词的外观类似于abcddfef ghijklfgll MHFAGSJGKF。从中,我可以找到字符的第一次出现,但我也需要确定下一次出现的情况。您可以执行递归。或者第二部分中的substr如何进行posstr的递归。@AngocA db2 sql和sql是两个不同的数据库?我更新了我的答案。您可以在此处看到一个示例: