删除&来自Query的符号

时间:2016-10-31 07:26:30

标签: sql oracle

我们在Informatica SQ转换中运行Oracle查询,我在下面给出了我的查询

SELECT 
CAST(T.COLUMN_VALUE.EXTRACT('//text()') AS VARCHAR2(200))
FROM
    (SELECT regexp_replace('assaley&lee@direct.wvhin.org','(!@#$%^\&*()_+=)*','') as  RECIPIENTS FROM DUAL) T1,
    TABLE( xmlsequence( XMLTYPE( '<x><x>'  || REPLACE(t1.RECIPIENTS, ',', '</x><x>')  || '</x></x>' ).EXTRACT('//x/*'))) t


  where length(T1.RECIPIENTS) =28 -- and length(T1.RECIPIENTS) > 25

如果我运行以上查询提示某些用户输入到期'&amp;'这个象征性的参考,我应该关闭这个提示步骤。

任何人都可以帮我这个吗?

注意:'assaley&amp; lee@direct.wvhin.org'这个值是硬编码值。

由于 PANDIA

2 个答案:

答案 0 :(得分:0)

一种方法是使用UNISTR功能并将&硬编码为unicode文字:\0026
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions204.htm

SELECT unistr( 'assaley\0026lee@direct.wvhin.org' ) x
from dual;

X                          
----------------------------
assaley&lee@direct.wvhin.org

答案 1 :(得分:0)

无论您目前遇到什么问题,都应该更正代码。

在正则表达式中,您应该使用方括号或圆括号 圆括号用于表达捕获。
方括号用于设置字符。

SELECT  regexp_replace('assaley&lee@direct.wvhin.org','[!@#$%^\&*()_+=]+','') as  RECIPIENTS 
FROM    DUAL
;

或 - - 删除除字母和数字之外的任何内容:

SELECT  regexp_replace('assaley&lee@direct.wvhin.org','[^[:alpha:][:digit:]]','') as  RECIPIENTS 
FROM    DUAL
;