在字符串Oracle SQL之间插入字符

时间:2016-01-28 04:22:17

标签: sql oracle oracle11g

我需要在Oracle SQL中的每个字符后插入字符串。

示例:

ABC  will A,B,C

DEFG will be D,E,F,G

此问题仅在字符串

中提供一个字符

Oracle insert character into a string

3 个答案:

答案 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)

你可以使用:

  • REGEXP_REPLACE
  • RTRIM

例如,

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;