JonH ha coperto molto bene la parte su come scrivere la query. C'è anche un altro problema significativo che deve essere menzionato, tuttavia, che sono le caratteristiche di prestazione di una simile query. Ripetiamolo qui (adattato a Oracle):
SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;
Questa query limita il risultato di una funzione applicata a un valore di colonna (il risultato dell'applicazione della LENGTHfunzione alla EmployeeNamecolonna). In Oracle, e probabilmente in tutti gli altri RDBMS, questo significa che un indice regolare su EmployeeName sarà inutile per rispondere a questa domanda; il database eseguirà una scansione completa della tabella, che può essere davvero costosa.
Tuttavia, vari database offrono una funzione di indici di funzione progettata per velocizzare query come questa. Ad esempio, in Oracle, puoi creare un indice come questo:
CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));
Tuttavia, questo potrebbe non essere d'aiuto nel tuo caso, perché l'indice potrebbe non essere molto selettivo per la tua condizione. Con questo intendo quanto segue: stai chiedendo righe in cui la lunghezza del nome è maggiore di 4. Supponiamo che l'80% dei nomi dei dipendenti in quella tabella sia più lungo di 4. Bene, allora il database probabilmente concluderà ( correttamente) che non vale la pena usare l'indice, perché probabilmente dovrà comunque leggere la maggior parte dei blocchi nella tabella.
Tuttavia, se hai modificato la query in LENGTH(EmployeeName) <= 4o LENGTH(EmployeeName) > 35, supponendo che pochissimi dipendenti abbiano nomi con meno di 5 caratteri o più di 35, l'indice verrebbe selezionato e migliorerebbe le prestazioni.
Comunque, in breve: attenzione alle caratteristiche di prestazione di query come quella che stai cercando di scrivere.
ANDstatement- ad esempioSELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;