Come trasformare il linguaggio naturale in query SQL? Query fuzzy imprecise.sqlf
Domanda
Vorrei implementare una funzione, che consentirà all'utente di digitare qualcosa del genere:
"select * from products where low(price);"
Cosa è uguale a:
"select * from products where (price >=0) And (price <= 50);"
Forse conosci qualche soluzioni che saranno utili per me? La mia seconda domanda è dove nella struttura dell'applicazione dovrei trasformarlo? Nel codice dell'applicazione o in qualche modo nel database?
La mia app è scritta in C# e si collega a SQL Server 2008 tramite ADO.NET.
Sarei molto grato per eventuali suggerimenti, pseudocodi, ecc.
Grazie in anticipo !
Soluzione
SQL Server consente di definire le funzioni definite dall'utente (vedi Ad esempio questo articolo). Se hai definito una funzione low
Quindi il primo codice che hai scritto sarebbe una query SQL perfettamente valida e non avresti bisogno di fare alcun pre-elaborazione. La dichiarazione sembrerebbe approssimativamente così:
CREATE FUNCTION low(@price)
RETURNS boolean AS
BEGIN
RETURN (@price >= 0) AND (@price <= 50)
END
Se vuoi consentire un linguaggio più sfocato rispetto alle semplici chiamate di funzione, allora sarebbe un altro problema (e significativamente più complicato). Non sono a conoscenza di nessuna biblioteca che lo faccia e implementalo potrebbe essere una vera sfida. (Potresti voler aggiungere più esempi, in modo da poter vedere cosa intendi).
Naturalmente, se si consente all'utente di scrivere query SQL grezzi, l'utente dovrebbe essere qualcuno di cui ti puoi fidare (perché può facilmente abbandonare tutti i dati dal tuo database).