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