在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)
谢谢你的解决方案!