Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-06-2003
Avatar de cmgenny
cmgenny cmgenny is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo
Posts: 71
Poder: 22
cmgenny Va por buen camino
Puede un espacio dar error en una consulta

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
__________________
Y recueda que no hay preguntas tontas, si no, tontos que no preguntan.
Sr. Genny Cris Morillo Santos
Estudiante ING. Sistemas
Santo Domingo D.N.
Responder Con Cita
  #2  
Antiguo 03-06-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Pues SI que te dara problemas

Para solucionarlo, existe la funcion Trim

Sacado de la ayuda del LocalSQL.hlp

Cita:
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.
Responder Con Cita
  #3  
Antiguo 03-06-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 22
javiermorales Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 03-06-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
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)
Responder Con Cita
  #5  
Antiguo 03-06-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:01:19.


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
Copyright 1996-2007 Club Delphi