2011-03-19 33 views
0

我想要一份實現一個功能,這將允許用戶輸入這樣的事情:如何將自然語言轉換爲sql查詢?不精確的模糊queries.SQLf

"select * from products where low(price);" 

什麼等於:

"select * from products where (price >=0) And (price <= 50);" 

你也許知道任何對我有用的解決方案?我的第二個問題是應該在應用程序結構中的哪個位置進行轉換?在應用程序代碼中或以某種方式在數據庫中?

我的應用程序是用C#編寫的,並通過ADO.NET連接到SQL Server 2008。

我將是任何提示,非常的僞感激,等事先

謝謝!

回答

2

SQL Server允許您定義用戶定義的函數(請參閱for example this article)。如果你定義了一個函數low,那麼你寫的第一個代碼將是一個完全有效的SQL查詢,你根本不需要做任何預處理。聲明看起來大致是這樣的:

CREATE FUNCTION low(@price) 
RETURNS boolean AS 
BEGIN 
    RETURN (@price >= 0) AND (@price <= 50) 
END 

如果您希望讓更多的模糊語言不僅僅是函數調用,那麼這將是另一個(和顯著更復雜的)問題。我沒有意識到任何圖書館都會這樣做,並且自己實施這可能是一個相當大的挑戰。 (您可能想要添加更多示例,以便我們可以看到您的意思)。當然,如果你允許用戶編寫原始的SQL查詢,用戶應該是你可以信任的人(因爲他們可以很容易地從你的數據庫中刪除所有數據)。

+0

也可能值得一提的是,如果您將此實現爲您的解決方案,那麼您將需要使用SQL注入檢測庫! – Ocelot20 2011-03-19 21:08:49