Oracle上以逗号分隔的字符串的Concat列表(隐藏参数)



在Oracle类型的数据库中,我在参数中有一个字符串列表,我不能编辑,我甚至没有权限看到表结构。

我所知道的是,如果我做了这样的事情:

select concat(?parameter) as results

我得到

abcxyz012

那么我们假设这个输出依赖于像

这样的东西
select concat( "abc", "xyz", "012" )

有什么办法能让我找到

abc,xyz,012

或类似的吗?

编辑:请注意,这里的重点是参数-字符串列表-是一个变量,其值和长度因用户而异,并且不是先验已知的。

这个查询的目的是精确地识别构成

参数的所有字符串。

如果您正在接收abcxyz012,并且您想将其转换为abc,xyz,012,那么您可以使用substr如下:

select substr(results,1,3) || ',' || substr(results,4,6) || ',' || substr(results,7,9)
from (your_query)

在Oracle中,CONCAT只需要2个参数,所以您需要使用:

SELECT CONCAT( 
'abc',
CONCAT(
',',
CONCAT(
'xyz',
CONCAT(
',',
'012'
)
)
)
) AS value
FROM   DUAL;

或者,使用字符串连接操作符||:

SELECT 'abc' || ',' || 'xyz' || ',' || '012' AS value FROM DUAL;

(注意:在Oracle中,双引号"表示区分大小写的标识符,如表/列名。如果你想要一个字符串字面值,那么你需要使用单引号。)

两者都输出:

| VALUE ||:---------- || abc,xyz,012 |

db<此处小提琴>


如果你想把字符串分成3个字符的子字符串,那么:

SELECT SUBSTR(value,1,3) AS value1,
SUBSTR(value,4,3) AS value2,
SUBSTR(value,7,3) AS value3
FROM  (
SELECT 'abc' || 'xyz' || '012' AS value FROM DUAL
);

输出3列:

VALUE1 | VALUE2 | VALUE3:----- |:----- |:-----abc | xyz | 012

Else,如果您想要一个分隔值,那么,如果字符串是固定长度:

SELECT SUBSTR(value,1,3) || ',' || SUBSTR(value,4,3) || ',' || SUBSTR(value,7,3) AS delimited_value
FROM  (
SELECT 'abcxyz012' AS value FROM DUAL
);

或者,如果字符串是可变长度且不以逗号结尾:

SELECT RTRIM(REGEXP_REPLACE(value,'(...)', '1,'),',') AS delimited_value
FROM  (
SELECT 'abcxyz012' AS value FROM DUAL
)

同时输出:

| DELIMITED_VALUE ||:-------------- || abc,xyz,012 |

db<此处小提琴>

也许我没有很清楚地表达我的要求,我的问题的答案很简单:

select concat_ws(',', ?parameter)

谢谢你的解决方案!

相关内容

  • 没有找到相关文章

最新更新