PDA

Ver la Versión Completa : Puede un espacio dar error en una consulta


cmgenny
03-06-2003, 06:22:48
Holas

Buenas yo utilizo D5 con tablas Paradox's y Tquery's.

Mi pregunta es, puede un espacio en un campo de una tabla hacer trabajar mal a una consulta?

Me explico, si al introducir los datos en un campo al final el usuario le da un espacio sin querer, tiene que obligatoriamente la consulta llevar este espacio para trabajar bien.

eje. si el campo es Apellido:'Morel_' y el usuario lo escribe con ese espacio sin querer. La consulta para que me devueva exactamente este cliente tiene que tener el espacio.

Select nombre,apellido,direccion from clientes
where apellido='Morel_'

y no

Select nombre,apellido,direccion from clientes
where apellido='Morel'

Si esto es cierto existe alguna forma de que la consulta ignore estos espacios que el cliente introduce involuntariamente.

Gracias a todos por sus atenciones Bey Bey

__cadetill
03-06-2003, 06:37:32
Pues SI que te dara problemas

Para solucionarlo, existe la funcion Trim

Sacado de la ayuda del LocalSQL.hlp


Removes the trailing or leading character, or both, from a string.

TRIM([LEADING|TRAILING|BOTH] [trimmed_char] FROM column_reference)

Description

Use TRIM to delete the leading or trailing character, or both, from a character value (column, literal, parameter, or caculated values). The TRIM function only deletes characters located in the specified position.

The first parameter indicates the position of the character to be deleted, and has one of the following values:

Value Description

LEADING Deletes the character at the left end of the string.
TRAILING Deletes the character at the right end of the string.
BOTH Deletes the character at both ends of the string.

The trimmed character parameter specifies the character to be deleted, if present. Case-sensitivity is applied for this parameter. To make TRIM case-insensitive, use the UPPER function.

FROM specifies the character value from which to delete the character. The column reference for FROM can be a table column or a character literal.

Example variations:

TRIM syntax Result

TRIM(LEADING "_" FROM "_ABC_") "ABC_"
TRIM(TRAILING "_" FROM "_ABC_") "_ABC"
TRIM(BOTH "_" FROM "_ABC_") "ABC"
TRIM(BOTH "A" FROM "ABC") "BC"

When applied to retrieved data of a SELECT statement, the effect is transient and does not affect stored data. When applied to the update atoms of an UPDATE statement, the effect is persistent and permanently converts the case of the stored values.

Applicability

TRIM can only be used with character columns or literals. To use on values of other data types, the values must first be converted to CHAR using the CAST function.

Note: the TRIM function cannot be used with memo or BLOB columns.

javiermorales
03-06-2003, 14:39:50
Otra cosa que puedes hacer es sustituir tu SQL, por la siguiente:

Select nombre,apellido,direccion from clientes
where apellido like '*Morel*'

o

Select nombre,apellido,direccion from clientes
where apellido like '%Morel%'


Esto te daría todos los apellidos que contienen la palabra Morel. Dependiendo del motor de BD puede ser que los caracteres comodines se vean modificados, ya que pueden representar un único carácter (%) o cualquier número de caracteres (*) y puedes jugar con ellos.

Espero que te sirva. Un saludo.

__cadetill
03-06-2003, 15:25:53
Posteado originalmente por javiermorales
Select nombre,apellido,direccion from clientes
where apellido like '%Morel%'


Cierto, lo que pasa es que con una consulta así, a parte de Morel tmabien le saldra si alguien se llama, por poner un ejemplo Morela, o sea, cual quier "cosa" que contenga Morel

Lo del Trim lo decia por si SOLO quiere conseguir ese nombre (o apellido o lo que el quiera)

delphi.com.ar
03-06-2003, 16:50:58
Tanto el LIKE como el TRIM y/o LTRIM, RTRIM... Son las soluciones más comunes a este problema, pero quiero agregar algo: Si esta tabla es o será muy grande, seguramente vas a crear un índice por el campo apellido para acelerar la búsqueda, si es una búsqueda común, el tema es que si tu haces un LIKE que no tenga solamente un comodín a la derecha o utilizas funciones como el TRIM / UPPERCASE u otra función que altere dinámicamente el valor de los campos, tu consulta no utilizará el índice, a no ser que utilices índices de funciones, como soportan algunos motores.
Es solo un comentario, pero es importante a la hora de diseñar un sistema normalizar tanto la estructura de datos como los datos.