我们在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
答案 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
;