A veces podríamos necesitar que la consulta nos traiga los datos sin importar que estén en mayúsculas, en minúsculas, acentuados o no acentuados. Por ejemplo queremos obtener: MARIA, MARÍA, maria, maría, Maria, María.

Para ello, debemos usar un ordenamiento (collation, en inglés) que termine con CI_AI ya que eso significa que al ordenar no diferencie entre mayúsculas y minúsculas ni entre vocales acentuadas y no acentuadas.

Al crear nuestra tabla, las columnas que deseamos que tengan esa característica deberían tener el atributo COLLATE ES_ES_CI_AI (si el character set de la Base de Datos es ISO8859_1) o UNICODE_CI_AI (si el character set es UTF8).

Ejemplo:

CREATE TABLE PERSONAS (
   PER_IDENTI INTEGER NOT NULL,
   PER_NOMBRE VARCHAR(40) COLLATE ES_ES_CI_AI,
   PER_APELLD VARCHAR(20) COLLATE ES_ES_CI_AI);

ALTER TABLE PERSONAS ADD CONSTRAINT PK_PERSONAS PRIMARY KEY (PER_IDENTI);

Si usamos el programa EMS SQL Manager para crear nuestras tablas entonces veríamos algo similar a esto:

INSENSITIVO3

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

Las columnas PER_NOMBRE y PER_APELLD de la tabla PERSONAS usan COLLATE ES_ES_CI_AI y por lo tanto al escribir esta consulta:

SELECT
   PER_NOMBRE,
   PER_APELLD
FROM
   PERSONAS
WHERE
   PER_NOMBRE LIKE 'MARIA%'

esto será lo que obtendremos:

INSENSITIVO1

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

o sea, todas las “María” que tenemos en nuestra tabla de PERSONAS, sin importar como se escribieron los nombres de esas personas. Claro que en el SELECT podríamos escribir UPPER(PER_NOMBRE) y UPPER(PER_APELLD) para que todos los nombres y apellidos estén en mayúsculas, y en ese caso obtendríamos:

INSENSITIVO2

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

lo cual, en general por una cuestión de estética, sería preferible. Fíjate que los nombres que se escribieron sin acentos siguen estando sin acentos, pero son mostrados, que es lo que queríamos conseguir. Si en nuestra tabla no hubiéramos usado COLLATE ES_ES_CI_AI entonces el SELECT no nos hubiera mostrado los nombres que tienen acento.

Artículo relacionado:

El índice del blog Firebird21

Anuncios