如何将自然语言转换为sql查询?不精确的模糊queries.SQLf

问题描述:

我想要一份实现一个功能,这将允许用户输入这样的事情:如何将自然语言转换为sql查询?不精确的模糊queries.SQLf

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

什么等于:

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

你也许知道任何对我有用的解决方案?我的第二个问题是应该在应用程序结构中的哪个位置进行转换?在应用程序代码中或以某种方式在数据库中?

我的应用程序是用C#编写的,并通过ADO.NET连接到SQL Server 2008。

我将是任何提示,非常的伪感激,等事先

谢谢!

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