ฉันกำลังเรียนรู้สำนวนปกติและเล่นกับมันนิดหน่อย ฉันเสนอตัวเองให้ทำแบบฝึกหัดโดยฉันมีวิธีการลบนามแฝงของคอลัมน์ในคำสั่ง SQL Select สิ่งนี้ควรทำงานเช่นนี้:
- วิธีการนี้สามารถลบนามแฝงในคำสั่ง SQL select ด้วยคีย์เวิร์ด AS: “select ColumnA AS A”
- วิธีการนี้สามารถลบนามแฝงในคำสั่ง SQL select โดยไม่มีคีย์เวิร์ด AS: “select ColumnB B”
- วิธีการสามารถลบนามแฝงในคำสั่ง SQL select ที่มี "อักขระการดำเนินการ" (เช่นอักขระการดำเนินการต่อข้อมูล): "select 'Hello' || 'โลก!' AS HelloWorld”
จนถึงตอนนี้ฉันได้สร้างสองวิธีที่ใช้ได้กับบางกรณีเท่านั้น โค้ดต่อไปนี้ให้ข้อมูลสรุปเกี่ยวกับสิ่งที่ฉันได้ทำและเกี่ยวกับปัญหาที่ฉันกำลังเผชิญอยู่
static void Main(string[] args)
{
string cols1 = "ColA as AliasA, ColB AliasB , As As ASasas, Asasasas as As";
string cols2 = "'aaa' || 'bbb' AS AliasC , 'ccc' || 'ddd' AliasD";
string answer1 = RemAliases(cols1); // Works fine
string answer2 = RemAliases2(cols2); // Works fine
string answer3 = RemAliases2(cols1); // Doesn't work
string answer4 = RemAliases(cols2); // Doesn't work
}
static string RemAliases2(string inputSql)
{
string pattern1 = @"(.+)\s+AS\s+\w+";
string replacement1 = "$1";
string pattern2 = @"(.+)\s+\w+";
string replacement2 = "$1";
string result = Regex.Replace(inputSql, pattern1, replacement1, RegexOptions.IgnoreCase);
result = Regex.Replace(result, pattern2, replacement2, RegexOptions.IgnoreCase);
return result;
}
static string RemAliases(string inputSql)
{
string pattern1 = @"(\w+)\s+AS\s+\w+";
string replacement1 = "$1";
string pattern2 = @"(\w+)\s+\w+";
string replacement2 = "$1";
string result = Regex.Replace(inputSql, pattern1, replacement1, RegexOptions.IgnoreCase);
result = Regex.Replace(result, pattern2, replacement2, RegexOptions.IgnoreCase);
return result;
}
ฉันไม่ได้คาดหวังว่า “RemAliases()” จะทำงานได้ดีกับ “cols2” เพราะ “\w+” ไม่ตรงกับ “|” อักขระ. แม้ว่าฉันคาดหวังว่า “RemAliases2()” จะทำงานได้ดีกับ “cols1” เช่นกัน ใครช่วยกรุณาให้ความช่วยเหลือฉันบ้างเพื่อที่จะทราบว่าเหตุใด “RemAliases2()” จึงใช้งานไม่ได้กับกรณี “cols1” โปรดอย่าลังเลที่จะให้คำแนะนำอื่นๆ เกี่ยวกับวิธีที่ฉันใช้นิพจน์ทั่วไปเหล่านี้
ขอบคุณล่วงหน้า.
PS: ฉันใช้ .NET 2.0