小弟想请教大侠,这个正则应该怎么写
我想把类似 select code,name from table1 where code in (select code from table2) order by code 的语句转换为
select count(1) from table1 where code in (select code from table2)
也就是输入任意的一个sql语句,转换为可以查询出记录数的语句。在线求教。
我想把类似 select code,name from table1 where code in (select code from table2) order by code 的语句转换为
select count(1) from table1 where code in (select code from table2)
也就是输入任意的一个sql语句,转换为可以查询出记录数的语句。在线求教。
sql = "select count(1) as c from ("+ sql +") AS AA " ;
(?<=select) .+ (?=from table1)
regx = new Regex(@"select(\W|\w|\s)*from", RegexOptions.IgnoreCase);
commandText = regx.Replace(commandText, "select count(1) from");
regx = new Regex(@"order by(\W|\w|\s)*", RegexOptions.IgnoreCase);
commandText = regx.Replace(commandText, "");但是后面的子查询也会被替换,期待好的代码
为什么不考虑用幂白兄的处理方式
这里用正则处理局限性比较大,如果select 和from之间有子查询会是比较麻烦的regx = new Regex(@"(?<=^\s*select\s)(?:(?!\bfrom\b).)+(?=\sfrom)", RegexOptions.IgnoreCase);
commandText = regx.Replace(commandText, "count(1)");
regx = new Regex(@"order\s+by\s+\w+", RegexOptions.IgnoreCase);
commandText = regx.Replace(commandText, "");
resultSQL=Regex.Replace(yourSQL, "^(?is)select.+?from", "select count(*) from ")