JonH очень хорошо рассказал о том, как написать запрос. Однако следует упомянуть еще одну важную проблему, а именно характеристики производительности такого запроса. Повторим это здесь (адаптировано для Oracle):
SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;
Этот запрос ограничивает результат применения функции к значению столбца (результат применения LENGTHфункции к EmployeeNameстолбцу). В Oracle и, вероятно, во всех других СУБД это означает, что обычный индекс для EmployeeName будет бесполезен для ответа на этот запрос; база данных выполнит полное сканирование таблицы, что может быть очень дорогостоящим.
Однако различные базы данных предлагают функцию индексов функций, которая предназначена для ускорения подобных запросов. Например, в Oracle вы можете создать такой индекс:
CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));
Однако это может не помочь в вашем случае, потому что индекс может быть не очень избирательным для вашего состояния. Под этим я подразумеваю следующее: вы запрашиваете строки, в которых длина имени больше 4. Предположим, что 80% имен сотрудников в этой таблице длиннее 4. Что ж, тогда база данных, скорее всего, завершит ( правильно), что не стоит использовать индекс, потому что ему, вероятно, все равно придется читать большинство блоков в таблице.
Однако, если вы измените запрос, чтобы сказать LENGTH(EmployeeName) <= 4, или LENGTH(EmployeeName) > 35, если предположить, что очень немногие сотрудники имеют имена, содержащие менее 5 символов или более 35, тогда будет выбран индекс и улучшится производительность.
Короче говоря: остерегайтесь характеристик производительности запросов, подобных тому, который вы пытаетесь написать.
ANDутверждение, напримерSELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;