Как превратить естественный язык в запрос SQL? Неточные нечеткие запросы.sqlf
Вопрос
Я хотел бы внедрить функцию, которая позволит пользователю напечатать что -то вроде этого:
"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, пользователь должен быть кем -то, кому вы можете доверять (потому что он может легко отбросить все данные из вашей базы данных).