La ingenua respuesta es:
select name from world where name like '%united%'
Sin embargo, esto tiene varios problemas:
a) distingue entre mayúsculas y minúsculas, por lo que no obtendrá las respuestas que espera
b) está realizando un escaneo completo de la tabla (leyendo cada fila de la tabla), lo que será un problema importante en una aplicación no trivial.
Una solución un poco mejor es:
select name from world where lower(name) like '%united%'
o equivalente
select name from world where upper(name) like '%UNITED%'
Esto resuelve el problema de mayúsculas y minúsculas, pero todavía está haciendo un escaneo de tabla. Sin embargo, esto introduce un nuevo problema, es decir, usar una función en el lado izquierdo de una expresión de comparación (lval), lo que significa que no podríamos usar un índice incluso si tuviéramos uno.
- Si tuviera que ofrecer soporte multilingüe en mis videos de capacitación de Apple, ¿qué idiomas debería elegir para abordar mejor el mercado de habla no inglesa de Apple?
- Mi abuelo (70 años) sufre de dolor lumbar durante los últimos tres años. Ha probado todo tipo de medicamentos. ¿Qué debe hacer?
- Tengo 32 / F y soltero. El astrólogo de mi madre dice que mi cuadro muestra el matrimonio tardío / no. ¿Puede la astrología predecir eso? ¿Cómo?
- Soy una mujer con sol de Aries, luna de Leo y levantamiento de Escorpio. ¿Qué dice de mí? Nací el 02/04/1985 a las 10.10 pm en Coonoor India.
- ¿Soy el único que encuentra la hipótesis de que el universo es una simulación completamente ridícula e inverosímil?
Si su base de datos admite expresiones regulares (por ejemplo, Postgres), puede hacer:
select name from world where name ~* 'united'
En Postgres, el operador ~ * le dice que haga una coincidencia de expresión regular sin distinción entre mayúsculas y minúsculas. Las expresiones regulares no le dan una mejora significativa en la velocidad sobre los comodines ANSI, pero sí le permiten construir patrones mucho más complejos. En este caso, obtenemos un beneficio porque no estamos aplicando una función al lval en la comparación, por lo que podríamos aprovechar un índice si tuviéramos uno.
MySQL también tiene un operador REGEXP, consulte la documentación. Debido a que las expresiones regulares no son parte del estándar ANSI SQL, se implementan de manera diferente en cada plataforma de base de datos.
Si la longitud de las cadenas se busca más de un par de cientos de caracteres, probablemente desee utilizar un motor de búsqueda de texto completo. Algunas bases de datos tienen esto como una característica incorporada: Búsqueda de texto completo de Postgres, Funciones de búsqueda de texto de MysSQL. Nuevamente, como las expresiones regulares, esto no es parte del estándar SQL, por lo que la implementación es diferente en cada base de datos.
En una aplicación del mundo real en la que debe realizar búsquedas de texto completo en millones de filas de texto, desearía mover la función de búsqueda fuera de la base de datos a un motor de búsqueda dedicado como Apache Solr.