Было интересно, можно ли выбрать что-то, что имеет больше / меньше символов в SQL.
Например, у меня есть таблица сотрудников, и я хочу показать все имена сотрудников, в имени которых более 4 символов.
Вот примерная таблица
ID EmpName Dept
1 Johnny ACC
2 Dan IT
3 Amriel PR
4 Amy HR
AND
утверждение, напримерSELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;
JonH очень хорошо рассказал о том, как написать запрос. Однако следует упомянуть еще одну важную проблему, а именно характеристики производительности такого запроса. Повторим это здесь (адаптировано для Oracle):
Этот запрос ограничивает результат применения функции к значению столбца (результат применения
LENGTH
функции кEmployeeName
столбцу). В Oracle и, вероятно, во всех других СУБД это означает, что обычный индекс для EmployeeName будет бесполезен для ответа на этот запрос; база данных выполнит полное сканирование таблицы, что может быть очень дорогостоящим.Однако различные базы данных предлагают функцию индексов функций, которая предназначена для ускорения подобных запросов. Например, в Oracle вы можете создать такой индекс:
Однако это может не помочь в вашем случае, потому что индекс может быть не очень избирательным для вашего состояния. Под этим я подразумеваю следующее: вы запрашиваете строки, в которых длина имени больше 4. Предположим, что 80% имен сотрудников в этой таблице длиннее 4. Что ж, тогда база данных, скорее всего, завершит ( правильно), что не стоит использовать индекс, потому что ему, вероятно, все равно придется читать большинство блоков в таблице.
Однако, если вы измените запрос, чтобы сказать
LENGTH(EmployeeName) <= 4
, илиLENGTH(EmployeeName) > 35
, если предположить, что очень немногие сотрудники имеют имена, содержащие менее 5 символов или более 35, тогда будет выбран индекс и улучшится производительность.Короче говоря: остерегайтесь характеристик производительности запросов, подобных тому, который вы пытаетесь написать.
источник
Сегодня я пробовал то же самое в db2 и использовал ниже, в моем случае у меня были пробелы в конце данных столбца varchar
источник
Если у вас возникла та же проблема при запросе к базе данных DB2, вам необходимо использовать следующий запрос.
источник