繁体   English   中英

我需要用正则表达式替换SQL语句中的字符

[英]I need the Regular Expression For Replacing Characters in a SQL Statement

我试图匹配此SQL语句上的BETWEEN RANGE,如下所示:

( WAEXD8 BETWEEN &WAEXD8 AND &WAEXD8 ) 

上面的SQL语句与DBS数据源一起使用,并且在通过ODBC驱动程序在iSeries连接上有效时,该DB连接类型不适用于ADO.NET。 ASP.NET ADO连接需要使用以下语法替换BETWEEN RANGE

date(digits(FIELDNAME) CONCAT '000000') <= current date and date(digits(FIELDNAME) CONCAT '000000') >= current date 

WHERE FIELDNAME是在原始SQL语句中找到的WAEXD8列...

我已经尝试过了,但到目前为止还没有一个真正的解决方案...

同样,我希望将原始SQL查询的ASP.NET C#正则表达式匹配/替换为替换字符串,同时保留原始列名。 这可能吗? 模式或模式示例是什么,以便我可以做到?

可能的其他解决方案:

要匹配(任意数量的带有BETWEEN且具有HTML实体&amp;的空格)

例如: ([(])|([BETWEEN])*([0-9A-Za-z])*([)])

不确定要做什么,但以下是一些可以帮助您的示例:

替换所有包含&amp; BETWEEN语句&amp; 和同一个FIELDNAME

将符合以下条件:

  • ( WAEXD8 BETWEEN &amp;WAEXD8 AND &amp;WAEXD8 )
  • (WAEXD8 BETWEEN &amp;WAEXD8 AND &amp;WAEXD8)
  • (WAEXD8 BETWEEN &amp;WAEXD8 AND &amp;WAEXD8 )
  • ( WAEXD8 BETWEEN &amp;WAEXD8 AND &amp;WAEXD8 )
  • ( FIELDEXAMPLE1 BETWEEN &amp;FIELDEXAMPLE1 AND &amp;FIELDEXAMPLE1 )

不匹配:

  • ( WAEXD8 BETWEEN WAEXD8 AND WAEXD8 )
  • ( WAEXD8 BETWEEN 0 AND 9000 )
  • ( WAEXD8 BETWEEN &amp;WAEXD8&A;NY1 AND &amp;WAEXD&8ANY2 )
  • ( FIELDEXAMPLE1 BETWEEN &amp;FIELDEXAMPLE2 AND &amp;FIELDEXAMPLE2 )


Regex regexObj = new Regex(@"\(\s*(\w+)\s+BETWEEN\s+&amp;\1\s+AND\s+&amp;\1\s*\)");
resultString = regexObj.Replace(subjectString, "(date(digits($1) CONCAT '000000') <= current date and date(digits($1) CONCAT '000000') >= current date)");

或者,如果您知道字段名称为AMAZINGFIELDNAME则:


Regex regexObj = new Regex(@"\(\s*(AMAZINGFIELDNAME)\s+BETWEEN\s+&amp;\1\s+AND\s+&amp;\1\s*\)");
resultString = regexObj.Replace(subjectString, "(date(digits($1) CONCAT '000000') <= current date and date(digits($1) CONCAT '000000') >= current date)");

将所有BETWEEN语句(包括任何语句)替换为字符“&”和“;”

将符合以下条件:

  • ( WAEXD8 BETWEEN &amp;WAEXD8 AND &amp;WAEXD8 )
  • ( WAEXD8 BETWEEN &amp;WAEXD8&A;NY1 AND &amp;WAEXD&8ANY2 )
  • ( FIELDEXAMPLE1 BETWEEN &amp;FIELDEXAMPLE2 AND &amp;FIELDEXAMPLE2 )


Regex regexObj = new Regex(@"\(\s*(\w+)\s+BETWEEN\s+[\w&;]+\s+AND\s+[\w&;]+\s*\)");
resultString = regexObj.Replace(subjectString, "(date(digits($1) CONCAT '000000') <= current date and date(digits($1) CONCAT '000000') >= current date)");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM