我想根据长度在 Oracle 中拆分我的字符串,并以空格作为分隔符。
例如,
MY_STRING="welcome to programming world"
我的输出应该是
STRING1="welcome to "
STRING2="programming "
字符串的长度最多应为 13 个字符。位置 26 之后的单词可以忽略。
您没有提及您使用的是哪个版本的 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 个字符,最后一个单词就不会被删除。
假设您使用的是早期版本,您可以一起破解一些东西instr
,length
但它根本不会很漂亮。