Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex SQL中的正则表达式_Regex_Oracle_Plsql_Oracle10g_Regexp Replace - Fatal编程技术网

Regex SQL中的正则表达式

Regex SQL中的正则表达式,regex,oracle,plsql,oracle10g,regexp-replace,Regex,Oracle,Plsql,Oracle10g,Regexp Replace,我必须创建一个正则表达式,其中我需要将ORACLE中动态查询的所有单词替换为NULL,但以@字符开头的单词除外。例如: select REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50', '[^@]?(@[[:alnum:]]+)?', '\1') from dual; REGEXP_REPLACE

我必须创建一个正则表达式,其中我需要将ORACLE中动态查询的所有单词替换为NULL,但以@字符开头的单词除外。例如:

select REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50',
  '[^@]?(@[[:alnum:]]+)?', '\1')
from dual;

REGEXP_REPLACE('SELECT@PAR
--------------------------
@param1@param2@code@param4
SQL:

使用REGEXP\u替换

DECLARE
    vl_result VARCHAR2(1000);
BEGIN
    vl_result := REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50', 'EXP_REG', '');
    dbms_output.put_line(vl_result);
END;
应具有以下结果:

@param1@param2@code@param4
并尝试了几种不同的方法,但仍然不能

他们知道你是否能做到这一点??正则表达式有多严重


对于给定的示例,我正在处理PL/SQL

以下工作:

select REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50', '.*?((@[^ ,]+)|$)', '\1') new_str
from   dual;

NEW_STR                   
--------------------------
@param1@param2@code@param4

以下内容适用于给定示例:

select REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50', '.*?((@[^ ,]+)|$)', '\1') new_str
from   dual;

NEW_STR                   
--------------------------
@param1@param2@code@param4
这也适用于您的示例:

select REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50',
  '[^@]?(@[[:alnum:]]+)?', '\1')
from dual;

REGEXP_REPLACE('SELECT@PAR
--------------------------
@param1@param2@code@param4
PL/SQL也适用于此(当然@boneists也是如此):

这也适用于您的示例:

select REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50',
  '[^@]?(@[[:alnum:]]+)?', '\1')
from dual;

REGEXP_REPLACE('SELECT@PAR
--------------------------
@param1@param2@code@param4
PL/SQL也适用于此(当然@boneists也是如此):


我非常感激,非常感激