Как превратить естественный язык в запрос SQL? Неточные нечеткие запросы.sqlf

StackOverflow https://stackoverflow.com/questions/5364850

Вопрос

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

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

Что равно:

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top