Tôi có một ứng dụng web asp.net cần một trang tìm kiếm để tìm kiếm dữ liệu trong một bảng cụ thể (SQL). Hôm nay, nó chỉ có truy vấn LIKE đơn giản, sử dụng sql được parametized:Tìm kiếm SQL với các toán tử logic
SqlParameter[] param = new SqlParameter[1];
param[0] = new SqlParameter("@searchText", SqlDbType.VarChar);
param[0].Value = "%" + text + "%";
using (SqlDataReader dr = SqlHelper.ExecuteReader(this.ConnectionString, CommandType.StoredProcedure, "isp_Search", param))
{
//Do something
}
Bây giờ tôi cần thêm tùy chọn để sử dụng toán tử logic cho tìm kiếm.
Vì vậy, trong hộp văn bản người dùng có thể tìm kiếm những thứ như
Adam OR Adams
James AND NOT Jame
Douglas AND (Adam OR Adams)
Thêm chỉ mục toàn văn để bàn không phải là một lựa chọn ưa thích kể từ khi tôi không kiểm soát mô hình dữ liệu.
Tôi đang tìm một phương pháp diễn giải các truy vấn văn bản và chuyển đổi thành câu lệnh SQL với số lượng SqlParams thích hợp.
searchexpression = "Douglas AND (Adam OR Adams)"
MakeSearchQuery(searchexpression, out sqlquery, out SqlParam[] params)
Would return somelike như
sqlquery = "SELECT someFields FROM table WHERE [email protected] AND ([email protected] OR [email protected])"
Và một sqlParams như
sqlParam[0] = 'Douglas'
sqlParam[1] = 'Adam'
sqlParam[2] = 'Adams'
Bây giờ thì phải có ai đó mà đã thực hiện một cái gì đó như thế này trước đây chưa? Tôi đã tìm kiếm cả SO và Google mà không có bất kỳ thành công thực sự nào. Và các con trỏ tới mã nguồn mở/miễn phí hoặc ý tưởng hay về cách chuyển đổi biểu thức tìm kiếm thành SQL được chào đón.
Bạn làm việc với công cụ SQL nào, câu trả lời khác với mỗi cơ sở dữ liệu. một số hỗ trợ regexp, một số thì không. – Johan
SQL Server 2008 R2 – Paaland