我需要在Oracle SQL中的每个字符后插入字符串。
示例:
ABC will A,B,C
DEFG will be D,E,F,G
此问题仅在字符串
中提供一个字符答案 0 :(得分:4)
编辑:正如一些研究员所提到的,甲骨文不承认这个正则表达式。所以我的方法是做一个正则表达式匹配所有字符,在字符后添加逗号,然后删除最后一个逗号。
WITH regex AS (SELECT REGEXP_REPLACE('ABC', '(.)', '\1,') as reg FROM dual) SELECT SUBSTR(reg, 1, length(reg)-1) FROM regex;
请注意,使用rtrim
的解决方案时,如果要解析的字符串具有最终结尾逗号并且您不想删除它,则可能会出错。
以前的解决方案:(不在Oracle上工作)
检查这是否有效:
SELECT REGEXP_REPLACE('ABC', '(.)(?!$)', '\1,') FROM dual;
每个角色都有一个regexp_replace
,但最后一个是同一个角色后跟一个,
要了解regexp_replace
的工作原理,我建议您:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm
答案 1 :(得分:1)
你可以使用:
例如,
SQL> WITH sample_data AS(
2 SELECT 'ABC' str FROM dual UNION ALL
3 SELECT 'DEFG' str FROM dual UNION ALL
4 SELECT 'XYZ' str FROM dual
5 )
6 -- end of sample_data mimicking a real table
7 SELECT str,
8 rtrim(regexp_replace(str, '(\w?)', '\1,'),',') new_str
9 FROM sample_data;
STR NEW_STR
---- ----------
ABC A,B,C
DEFG D,E,F,G
XYZ X,Y,Z
答案 2 :(得分:1)
SELECT rtrim(REGEXP_REPLACE('ABC','(。)','\ 1,'),',')“REGEXP_REPLACE”FROM dual;