CSharp · Console
using System;
using System.Text.RegularExpressions;
using System.Linq;
public class Program
{
public static void Main()
{
string simplequery=@" select c.id,person_id,c.customer_no,c.status,p.first_name,p.last_name,p.dob as DateOfBirth
from customer c
inner join person p on p.id=c.person_id";
string query=@" select c.id,person_id,c.customer_no,c.status,p.first_name,p.last_name,p.dob as DateOfBirth,concat(p.first_name,' ',p.last_name) as fullName
from customer c
inner join person p on p.id=c.person_id";
string[] IgnoredFields = new string[]{"id", "person_id","DateOfBirth"};
query = Regex.Replace(query, @"\t|\n|\r", ""); // remove new line character
var reg=new Regex(@"(?is)SELECT(.*?)(?<!\w*"")FROM(?!\w*?"")(.*?)(?=WHERE|ORDER|$)");
var columns=reg.Match(query).Groups[1].Value.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
var fieldsSubString = String.Join(",", columns); // taking string in between select and from keyword
fieldsSubString=Regex.Replace(fieldsSubString, @"(\(|[\s]?(concat\(|min\(|max\(|count\())(.*?)(\)(.*?)([\s|as\s]+))", ""); //remove manipulated columns
var commaSeperatedFields=fieldsSubString.Trim(',').Replace(",,", ","); // remove unwanted commas
var fieldsWithAlias=commaSeperatedFields.Split(',');
var fields=fieldsWithAlias.Select(x=>(x.Contains(".")?x.Split('.')[1]:x));
fields=fields.Select(x=>(x.Contains(" as ")?x.Split(new string[] { " as " }, StringSplitOptions.None)[1]:x));
var remains = fields.Except(IgnoredFields);
var customQuery=@"select "+String.Join(",",remains)+" from ("+query+") xc2ty" ;
Console.WriteLine(customQuery);
}
}