Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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
C# 我需要正则表达式来替换SQL语句中的字符_C#_Asp.net_Sql_Regex - Fatal编程技术网

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

C# 我需要正则表达式来替换SQL语句中的字符,c#,asp.net,sql,regex,C#,Asp.net,Sql,Regex,我正在尝试匹配此SQL语句的范围,如下所示: ( WAEXD8 BETWEEN &amp;WAEXD8 AND &amp;WAEXD8 ) 上面的SQL语句适用于DBS数据源,虽然通过ODBC驱动程序在iSeries连接上有效,但该DB连接类型在ADO.NET上不起作用。ASP.NET ADO连接需要使用以下语法替换介于之间的范围 date(digits(FIELDNAME) CONCAT '000000') <= current date and date(digit

我正在尝试匹配此SQL语句的范围,如下所示:

( WAEXD8 BETWEEN &amp;WAEXD8 AND &amp;WAEXD8 ) 
上面的SQL语句适用于DBS数据源,虽然通过ODBC驱动程序在iSeries连接上有效,但该DB连接类型在ADO.NET上不起作用。ASP.NET ADO连接需要使用以下语法替换介于之间的范围

date(digits(FIELDNAME) CONCAT '000000') <= current date and date(digits(FIELDNAME) CONCAT '000000') >= current date 
date(数字(字段名)CONCAT'000000')=当前日期
其中FIELDNAME是原始SQL语句中的WAEXD8列

我已经试过了,但到目前为止还没有找到一个真正的解决办法

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

可能的其他解决办法:

匹配(任意数量的空格,带介于之间且具有HTML实体
&;
with)


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

不太清楚你想要什么,但这里有一些例子应该涵盖你:

替换所有包含
&;的中间语句和相同的字段名
将匹配以下内容:

  • (WAEXD8和WAEXD8之间的WAEXD8)
  • (WAEXD8和WAEXD8之间的WAEXD8)
  • (WAEXD8和WAEXD8之间的WAEXD8)
  • (WAEXD8和WAEXD8之间的WAEXD8)
  • (FIELDEXAMPLE1介于&;FIELDEXAMPLE1和&;FIELDEXAMPLE1之间)
将不匹配:

  • (WAEXD8和WAEXD8之间的WAEXD8)
  • (0到9000之间的WAEXD8)
  • (WAEXD8位于&;WAEXD8&A;NY1和&;WAEXD&8ANY2之间)
  • (FIELDEXAMPLE1介于&;FIELDEXAMPLE2和&;FIELDEXAMPLE2之间)

或者,如果您知道字段名为
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)");

将所有中间语句(包括任何语句)替换为“&”和“ 将匹配以下内容:

  • (WAEXD8和WAEXD8之间的WAEXD8)
  • (WAEXD8位于&;WAEXD8&A;NY1和&;WAEXD&8ANY2之间)
  • (FIELDEXAMPLE1介于&;FIELDEXAMPLE2和&;FIELDEXAMPLE2之间)

也许没有其他方法,但您确定需要使用正则表达式来实现这一点吗?请记住:原始查询不是从源代码“只读”的另一种方式,我正在尝试提供一种自动清理方法。这通常不是我的方法,因为我实际上不做正则表达式模式匹配。一般来说,我重写了查询本身,或者构建了一个过程来正确地查询数据,而不必借助噱头来规范化查询语法。是的,它做得非常好…我当时没有发表评论…很抱歉延迟了。

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)");

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)");