3

我想根据长度在 Oracle 中拆分我的字符串,并以空格作为分隔符。

例如,

MY_STRING="welcome to programming world"

我的输出应该是

STRING1="welcome to "
STRING2="programming "

字符串的长度最多应为 13 个字符。位置 26 之后的单词可以忽略。

4

1 回答 1

1

您没有提及您使用的是哪个版本的 Oracle。如果您使用的是 10g 或更高版本,则可以使用正则表达式来获得所需的内容:

with spaces as (
 select regexp_instr('welcome to programming world' || ' '
                    , '[[:space:]]', 1, level) as s
   from dual
connect by level <= regexp_count('welcome to programming world' || ' '
                                , '[[:space:]]')
        )
, actual as (
 select max(case when s <= 13 then s else 0 end) as a
      , max(case when s <= 26 then s else 0 end) as b
   from spaces
        )
select substr('welcome to programming world',1,a)
     , substr('welcome to programming world',a, b - a)
  from actual

这会找到所有空格的位置索引,然后找到最接近但小于 14 的那个。最后使用一个简单substr的来分割你的字符串。字符串将有一个尾随空格,因此您可能想要这样做trim

你必须用空格连接你的字符串以确保有一个尾随空格,这样如果你的字符串短于 26 个字符,最后一个单词就不会被删除。

假设您使用的是早期版本,您可以一起破解一些东西instrlength但它根本不会很漂亮。

于 2012-08-02T08:16:52.843 回答