Sql Oracle字符串组合置换
我想我有一个复杂的要求 这是一个使用Oracle10.2的组合置换,我可以用笛卡尔连接来解决它,但我认为它需要一些改进,使它更简单、更灵活 主要行为 输入字符串:“一两” 输出: “一个” “两个” “一二” “二一” 对于我的解决方案,我将字符串的数量限制为5。请注意,输出是一个接近阶乘的数字 SQL:Sql Oracle字符串组合置换,sql,oracle,plsql,oracle10g,Sql,Oracle,Plsql,Oracle10g,我想我有一个复杂的要求 这是一个使用Oracle10.2的组合置换,我可以用笛卡尔连接来解决它,但我认为它需要一些改进,使它更简单、更灵活 主要行为 输入字符串:“一两” 输出: “一个” “两个” “一二” “二一” 对于我的解决方案,我将字符串的数量限制为5。请注意,输出是一个接近阶乘的数字 SQL: 编辑:得到了通用的。最后真的很简单,但我花了一段时间才到达那里 WITH words AS ( SELECT REGEXP_SUBSTR( '&txt', '\S+', 1, L
编辑:得到了通用的。最后真的很简单,但我花了一段时间才到达那里
WITH words AS
( SELECT REGEXP_SUBSTR( '&txt', '\S+', 1, LEVEL ) AS word
, LEVEL AS num
FROM DUAL
CONNECT BY LEVEL <= LENGTH( REGEXP_REPLACE( '&txt', '\S+\s*', 'X' ) )
)
SELECT SYS_CONNECT_BY_PATH( W.word, ' ' )
FROM words W
CONNECT BY NOCYCLE PRIOR W.num != W.num
Edit2:删除了冗余的maxnum内容。从以前的尝试中遗留下来的它必须是SQL还是也可以使用plsql?您将拥有固定数量的字符串元素?因为如果它可以变化,那么我不知道如何避免使用PL/SQL路由。您使用flexible一词表明您正是这么想的。是的,可以使用plsql完成。关于字符串元素的数量,它是可变的。它可以是从1到n。。但是由于大量的组合,我同意<8。请注意,一个9元素的字符串生成986481 combinationsgreat解决方案,这正是我所需要的!
WITH words AS
( SELECT REGEXP_SUBSTR( '&txt', '\S+', 1, LEVEL ) AS word
, LEVEL AS num
FROM DUAL
CONNECT BY LEVEL <= LENGTH( REGEXP_REPLACE( '&txt', '\S+\s*', 'X' ) )
)
SELECT SYS_CONNECT_BY_PATH( W.word, ' ' )
FROM words W
CONNECT BY NOCYCLE PRIOR W.num != W.num