Eligiendo entre LIKE y CONTAINING en los SELECT

5 comentarios

Cuando en una consulta la condición de búsqueda es alfanumérica podemos usar (entre otras posibilidades)  a LIKE y a CONTAINING.

¿Cuál es preferible?

LIKE distingue entre mayúsculas y minúsculas, en cambio CONTAINING no las distingue.

Ejemplo:

Tenemos una tabla llamada BANCOS con estas filas:

LIKE1

Captura 1. Si haces clic en la imagen la verás más grande

SELECT
   *
FROM
   BANCOS
WHERE
   BAN_CODSUC >= 0 AND
   BAN_NOMBRE LIKE '%BAN%'

LIKE2

Captura 2. Si haces clic en la imagen la verás más grande

En la Captura 2 podemos ver cuales son las filas que obtuvimos al usar LIKE.

SELECT
   *
FROM
   BANCOS
WHERE
   BAN_CODSUC >= 0 AND
   BAN_NOMBRE CONTAINING 'BAN'

LIKE3

Captura 3. Si haces clic en la imagen la verás más grande

Y en la Captura 3 las filas que obtenemos al usar CONTAINING.

Como puedes ver, con CONTAINING obtuvimos más filas porque nos muestra las que están en mayúsculas y también las que están en minúsculas. Por eso en general, cuando los nombres no están estandarizados es preferible usar CONTAINING.

Esto sucede a menudo cuando son varias las personas encargadas de registrar los datos en una tabla. Algunos escriben todo en mayúsculas y algunos mezclan mayúsculas con minúsculas. Entonces, para asegurarnos que encontremos todos los datos buscados, sea que los hayan escrito en mayúsculas o en minúsculas debemos usar CONTAINING.

Artículo relacionado:

El índice del blog Firebird21

TRIM()

1 comentario

Descripción: Elimina los espacios que están a la izquierda o a la derecha de una cadena alfanumérica (opcionalmente, otros caracteres también pueden ser eliminados). Soporta BLOBs de texto de cualquier longitud.

Tipo de resultado: Varchar o BLOB

Sintaxis:

TRIM([<ajuste>] cadena_alfanumérica)

<ajuste> = {[donde] [que] } FROM

donde = BOTH | LEADING | TRAILING       — por defecto es BOTH (significa “ambos”)

          que      = La subcadena a ser eliminada (repetidamente si fuera necesario) desde el inicio de la cadena_alfanumérica (si BOTH o LEADING fueron especificados) o desde el final de la cadena_alfanumérica (si BOTH o TRAILING fueron especificados), por defecto es ‘ ‘ (espacio en blanco)

Ejemplos:

SELECT
   TRIM('    No desperdicies espacio      ')
FROM
   RDB$DATABASE

SELECT
   TRIM(LEADING FROM '    No desperdicies espacio      ')
FROM
   RDB$DATABASE

SELECT
   TRIM(LEADING '.' FROM '    No desperdicies espacio      ')
FROM
   RDB$DATABASE

SELECT
TRIM(TRAILING '!' FROM '    No desperdicies espacio!!!!!!!!!!!!!!!!')
FROM
RDB$DATABASE

El primer SELECT devolverá ‘No desperdicies espacio’

El segundo SELECT devolverá ‘No desperdicies espacio      ‘

El tercer SELECT devolverá ‘    No desperdicies espacio      ‘

El cuarto SELECT devolverá ‘    No desperdicies espacio’

Notas:

  • Si cadena_alfanumérica es un BLOB, el resultado será un BLOB. En los demás casos será un Varchar.
  • La subcadena a ser eliminada (si fue especificada) no puede tener más de 32767 bytes. Sin embargo, si esta subcadena está repetida al principio o al final de la cadena_alfanumérica, la cantidad total de bytes eliminados puede ser mucho más grande.