Escape LIKE clause

Đầu năm, tôi xin trình bày phương pháp escape kí tự đặc biệt trong LIKE clause. Phương pháp này là nhờ 1 team-mate trong nhóm. Cậu ấy là 1 chuyên gia về kĩ thuật.

Trong câu lệnh SQL, khi sử dụng truy vấn bằng từ khóa LIKE, việc áp dụng Regular Expression rất có hiệu quả. Ví dụ, trong SQL Server:

– %: bất cứ string nào

– _: bất cứ kí tự nào

– []: character class

– [^]: negative character class.

Để escape các kí tự Regular expression, SQL Server hỗ trợ 2 phương pháp:

Đưa các kí tự syntax Regular Expression vào cặp kí tự []. Ví dụ: [%]: kí tự %

Sử dụng từ khóa ESCAPE của SQL. Ví dụ: LIKE ‘%5/%%’ ESCAPE ‘/’.

Như vậy, khi lập trình ADO.NET dùng SQL cần thiết phải sử dụng Param (C#) hoặc Parameter (Java) để chống SQL Injection. Khi sử dụng từ khóa LIKE trong câu query, đặc biệt cần escape các kí tự đặc biệt như %, [, ], _, ^ … với dữ liệu do user nhập vào. Sử dụng Regular Expression trong C# là 1 trong những cách tốt nhất.

// Characters in LIKE clause that need to be replaced

private const string LikeEscapePattern = @”([%_\[])”; // % _ [

// Characters used to replace escape characters above

private const string LikeReplacePattern = @”[$1]”;

// The regex used to replace escape characters in LIKE clause

private static readonly Regex likeRegex = new Regex(LikeEscapePattern, RegexOptions.Compiled);

public string EscapeLikeClause(string clause)

{

return likeRegex.Replace(clause, LikeReplacePattern);

}

 

RegularExpression còn được sử dụng trong SQL Server ở Function PATINDEX. Chi tiết về Regular Expression trong SQL ở SQL Server và Oracle…, cần tham khảo các tài liệu do các hãng cung cấp.

Do SQL Server hỗ trợ Regular Expression không mạnh bằng Oracle 10g+ (tôi sẽ trình bày ở 1 bài khác), có thể sử dụng tính năng mới có thể gọi CLR Assembly trong SQL Server 2005 để sử dụng Regular Expression trong .NET (tôi sẽ trình bày ở 1 bài khác). Với SQL Server 2000, có thể viết Function gọi đến extended object bên ngoài (VBScript,…) để thực hiện thao tác Regular Expression.

Advertisements

2 Responses to “Escape LIKE clause”

  1. Nam Says:

    Hi
    Anh đang có 1 việc làm (có kinh phí) liên quan đến Regex HTML, cần chuyên gia có kinh nghiệm xử lý.
    Em gọi điện thoại cho anh theo số 0934188989
    hoặc skype nam.truongthanh
    để trao đổi chi tiết nhé.

  2. nguyenminhdung Says:

    Hi anh, lâu rồi em cũng ko động đến Regex nên cũng quên hết rồi. Dù sao em cũng cám ơn anh.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: