Sql 仅从VARCHAR列中提取字母字符

Sql 仅从VARCHAR列中提取字母字符,sql,regex,oracle,oracle11g,oracle9i,Sql,Regex,Oracle,Oracle11g,Oracle9i,我有一个类型为VARCHAR2的列,其文本类似于'2014年3月12日,1234,数据,值,2014年3月12日,124,结束'。我需要输出为,“%DATA%VALUE%End%”。i、 e.要用逗号分隔的文本,'。只需选择字母,省去日期、数字或特殊字符。大概 select some_function('12-MAR-2014,,1234,DATA,VALUE,12/03/14,,124,End') as output from dual; OUTPUT --------- %DATA%VAL

我有一个类型为
VARCHAR2
的列,其文本类似于
'2014年3月12日,1234,数据,值,2014年3月12日,124,结束'
。我需要输出为,
“%DATA%VALUE%End%”
。i、 e.要用逗号分隔的文本
,'
。只需选择字母,省去日期、数字或特殊字符。大概

select some_function('12-MAR-2014,,1234,DATA,VALUE,12/03/14,,124,End') as output from dual;

OUTPUT
---------
%DATA%VALUE%End%
编辑:

需要保留字母数字值的另一项附加要求:

select some_function('12-MAR-2014,,1234,DATA65,VALUE,12/03/14,,124,End') as output from dual;

OUTPUT
---------
%DATA65%VALUE%End%

您可以使用
regexp\u replace()
。我认为这个表达是这样的:

select regexp_replace(col, '([^a-zA-Z]+)', '%')

不幸的是,我现在无法测试这一点(SQL Fiddle已关闭)。

类似的内容可能会帮助您:

select regexp_replace('12-MAR-2014,,1234,DATA,VALUE,12/03/14,,124,End','[[0-9]{2}-(JAN|FEB|MAR|APR|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-[0-9]{4}]*|[^a-zA-Z]+|$','%') from dual

不幸的是,这不起作用——“MAR”对应于模式,但不应出现在结果中:(工作非常完美。但我尝试将此功能用于字母数字字符,如select regexp|u replace('2014年3月12日,1234,DATA65,VALUE,12/03/14,124,End','[[0-9]{2}-(1月2日3月4日6月7月8月12日9月10日11月12日12日12日12月14日)-[0-9]{^[a-zA Z]+[0-9]*')来自dual。但似乎不起作用。我知道我遗漏了一些非常明显的东西。应该做些什么来让它起作用?