Как преобразовать естественный язык в SQL-запрос?Неточные нечеткие запросы.SQLf - PullRequest
0 голосов
/ 19 марта 2011

Я хотел бы реализовать функцию, которая позволит пользователю печатать что-то вроде этого:

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

что равно:

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

знаете ли вы какие-либо решения, которые будут полезны для меня? Мой второй вопрос: где в структуре приложения я должен преобразовать это? В коде приложения или как-то в базе данных?

Мое приложение написано на C # и подключается к SQL Server 2008 через ADO.NET.

Я был бы очень признателен за любые подсказки, псевдокод и т. Д.

Заранее спасибо!

1 Ответ

2 голосов
/ 20 марта 2011

SQL Server позволяет вам определять пользовательские функции (см. , например, эту статью ).Если вы определили функцию low, то первый код, который вы написали, был бы совершенно корректным SQL-запросом, и вам вообще не нужно было бы выполнять какую-либо предварительную обработку.Объявление будет выглядеть примерно так:

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

Если вы хотите разрешить более нечеткий язык, чем просто вызовы функций, тогда это будет еще одной (и значительно более сложной) проблемой.Я не знаю ни о какой библиотеке, которая бы это делала, и реализовать это самостоятельно было бы довольно сложной задачей.(Возможно, вы захотите добавить больше примеров, чтобы мы могли понять, что вы имеете в виду).

Конечно, если вы разрешаете пользователю писать необработанные SQL-запросы, пользователь должен быть тем, кому вы можете доверять (потому чтоможет легко удалить все данные из вашей базы данных).

...