Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Case sensitive (https://www.clubdelphi.com/foros/showthread.php?t=53311)

Jcarloscgl 18-02-2008 16:10:54

Case sensitive
 
Como puede hacer para que no haga diferencia entre minusculas y mayusculas en una base de datos firebird instalada en windows xp

Atte
Juan Carlos

Lepe 18-02-2008 17:06:07

Código SQL [-]
select * from tabla where nombre containing 'an'

Tendrás definido un juego de caracteres (character set) y cotejamientos (collate es_es) tanto en la base de datos y campos, como al conectar tu aplicación.

Saludos

hecospina 19-02-2008 13:23:01

Otra solucion podria ser convertir en la consulta todo a mayusculas
Ej
Código SQL [-]
select * from table where upper(campo1)=upper(criterio de consulta)

RolphyReyes 19-02-2008 13:46:12

Saludos.

NO quiero que vayan a pensar que les estoy regañando sino que les estoy mejorando sus conceptos.

Cita:

Empezado por Lepe
Código SQL [-]select * from tabla where nombre containing 'an'

Esta solución es buena hasta un sentido porque el manejador busca "lo que sea" pero la mayor desventaja es que no utiliza indices aun teniendolo definido en el campo.

Cita:

Empezado por hecospina

Código SQL [-]
select * from table where upper(campo1)=upper(criterio de consulta)
Buena solución pero tambien obvia el indice.

La mejor recomendación es que utilices STARTING WITH que si toma en cuenta el indice, la desventaja es que es case sensitive.

Pero si utilizas Firebird 2.0 puedes definir un indice con expresión.
Código:

CREATE INDEX IDX1 ON T1
COMPUTED BY ( UPPER(COL1) );
COMMIT

Entonces sí con esta definición de indices puedes hacer lo siguiente:
Código SQL [-]
Select * From t1 Where col1 Starting With Upper('hola');

Teniendo en cuenta que el string guardado debe de estar en mayuscula en ese campo, puedes hacer un trigger before post de tu tabla y almacenarlo en mayuscula.

Bueno espero haberte ayudado.

Lepe 19-02-2008 16:31:13

Según tengo entendido en FB 2 existe algunos cotejamientos (collate) case INsensitive, ¿sabes si hay alguno español? Yo hasta el momento he oído hablar de algunos en inglés :(.

En cuanto a los índices, pues sip, tienes razón, también puedes usar
Like 'pepe%' aunque seguimos en las mismas con el tema de mayúsculas.

Saludos

Lepe 21-02-2008 00:28:22

Pues acabo de mirar la fbintl.dll de la carpeta firebird2\intl y si viene definido el collate
Código SQL [-]
select propietario from cliente
where propietario collate ES_ES_CI_AI starting with 'clie'

Saludos

peccatum 02-08-2008 03:32:55

Cita:

Empezado por RolphyReyes (Mensaje 266898)



Código:

CREATE INDEX IDX1 ON T1
COMPUTED BY ( UPPER(COL1) );
COMMIT


Hola... he intentado crear un indice de ésa forma... pero obtengo el siguiente error:


/*******************************************************************************
The next statement causes the following error:

This operation is not defined for system tables.
unsuccessful metadata update.
no keys for index IDX_VEHICULOS_MARCA.
*******************************************************************************/

CREATE INDEX IDX_vehiculos_marca ON vehiculos COMPUTED BY (UPPER (marca));


¿Cual será el error aquí? :confused:

edit: estaría bueno cambiar el título del thread ya que me costó encontrarlo...

Lepe 02-08-2008 10:16:53

creo que el índice debes crearlo como otro cualquiera (sin tener en cuenta las mayúsculas). Es en la consulta cuando haces el "case insensitive".

Saludos


La franja horaria es GMT +2. Ahora son las 09:28:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi