Me preguntaba si es posible seleccionar algo que tenga más / menos de x caracteres en SQL.
Por ejemplo, tengo una tabla de empleados y quiero mostrar todos los nombres de empleados que tengan más de 4 caracteres en su nombre.
Aquí hay una tabla de ejemplo
ID EmpName Dept
1 Johnny ACC
2 Dan IT
3 Amriel PR
4 Amy HR
AND
declaración, por ejemploSELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;
JonH ha cubierto muy bien la parte sobre cómo escribir la consulta. Sin embargo, hay otro problema importante que también debe mencionarse, que son las características de rendimiento de dicha consulta. Repitámoslo aquí (adaptado a Oracle):
Esta consulta restringe el resultado de una función aplicada a un valor de columna (el resultado de aplicar la
LENGTH
función a laEmployeeName
columna). En Oracle, y probablemente en todos los demás RDBMS, esto significa que un índice regular en EmployeeName será inútil para responder a esta consulta; la base de datos realizará un escaneo completo de la tabla, lo que puede ser realmente costoso.Sin embargo, varias bases de datos ofrecen una función de índices que está diseñada para acelerar consultas como esta. Por ejemplo, en Oracle, puede crear un índice como este:
Sin embargo, esto podría no ser útil en su caso, porque el índice podría no ser muy selectivo para su condición. Con esto me refiero a lo siguiente: estás solicitando filas en las que la longitud del nombre sea superior a 4. Supongamos que el 80% de los nombres de los empleados en esa tabla son más largos que 4. Bueno, entonces es probable que la base de datos concluya ( correctamente) que no vale la pena usar el índice, porque probablemente tendrá que leer la mayoría de los bloques de la tabla de todos modos.
Sin embargo, si cambia la consulta para decir
LENGTH(EmployeeName) <= 4
, oLENGTH(EmployeeName) > 35
, asumiendo que muy pocos empleados tienen nombres con menos de 5 caracteres o más de 35, entonces el índice se seleccionará y mejorará el rendimiento.De todos modos, en resumen: tenga cuidado con las características de rendimiento de consultas como la que está intentando escribir.
fuente
Hoy intenté lo mismo en db2 y lo usé a continuación, en mi caso, tenía espacios al final de los datos de la columna varchar
fuente
Si experimenta el mismo problema al consultar una base de datos DB2, deberá utilizar la siguiente consulta.
fuente