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 22-04-2006
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Seleccionar ambito de apellidos por inicial

Hola:

Repito un hilo que tenía ayer y que ha desaparecido ???

FireBird conectado con IBXs.

Por ejemplo, el usuario escoge en dos ComboBox listar apellidos desde los que empiezan por A hasta los que empiezan por D.

La consulta que tengo y no me selecciona los de la D (en el ejemplo) es esta
Código SQL [-]
DM.IBDSSocios.SelectSQL.Text := 'select * from SOCIOS where APELLIDOS Between  :LDESDE and :LHASTA';
DM.IBDSSocios.ParamByName('LDESDE').AsString := CBLetraDesde.Text;
DM.IBDSSocios.ParamByName('LHASTA').AsString := CBLetraHasta.Text;

Lo que quiero hacer es en vez de comparar todo el apellido, comparar solo la inicial del apellido

Algo asi en seudocódigo:

'select ..... where Inicialde(APELLIDOS) Between .......'

¿Cómo se escribiría esto en SQL?

Gracias.

Un saludo.

Última edición por fidel fecha: 23-04-2006 a las 01:13:03.
Responder Con Cita
  #2  
Antiguo 23-04-2006
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Consulta

Master :
usa la sentencia CONTAING en el where lo que hace es buscar que el contenido de la palabar se encuentre en el dato a buscar ej:

select * from clientes where nombre containg "pe"

y va a traer todos los registros que tengan pe en su nombre

chau

Luis Roldan
Mar del Plata
Argentina
Responder Con Cita
  #3  
Antiguo 23-04-2006
opardor opardor is offline
Miembro
 
Registrado: jul 2005
Posts: 16
Poder: 0
opardor Va por buen camino
Hola, también podrias hacer algo la siguiente consulta SQL:

Código SQL [-]
select * from socios where apellidos between 'A%' and 'D%';
Responder Con Cita
  #4  
Antiguo 24-04-2006
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Hola:

Aclaro que es una tabla FireBird 1.5

CONTAING me da errror, y además creo que no serviría

select * from socios where apellidos between 'A%' and 'D%';

El problema que parece que hay es que no funciona el comodín %
Con Like si que funciona el comodín, pero no se como se puede hacer

Esto va correcto
Código SQL [-]
DM.IBDSSocios.SelectSQL.Text := 'select * from SOCIOS where UPPER(APELLIDOS) Between :LDESDE and :LHASTA';
DM.IBDSSocios.ParamByName('LDESDE').AsString := AnsiUpperCase('A');
DM.IBDSSocios.ParamByName('LHASTA').AsString := AnsiUpperCase('Gil Olmos');

Abad Antúnez
....
Gil Olmos

Esto con comodín % no funciona
Código SQL [-]
DM.IBDSSocios.SelectSQL.Text := 'select * from SOCIOS where UPPER(APELLIDOS) Between :LDESDE and :LHASTA';
DM.IBDSSocios.ParamByName('LDESDE').AsString := AnsiUpperCase('A');
DM.IBDSSocios.ParamByName('LHASTA').AsString := AnsiUpperCase('G') + '%';

Abad Antúnez
....
Fuentes Hiniesta

¿Alguna idea?, gracias.

Un saludo.

Última edición por fidel fecha: 24-04-2006 a las 11:46:43.
Responder Con Cita
  #5  
Antiguo 24-04-2006
opardor opardor is offline
Miembro
 
Registrado: jul 2005
Posts: 16
Poder: 0
opardor Va por buen camino
Wink

Cita:
Código SQL [-]
select * from socios where apellidos between 'A%' and 'D%';
Tienes razón. El comodín no funciona. Además, me devuelve valores hasta antes de los que empiecen por la letra D. Probé la sentencia anterior sin comodines y obtuve el mismo resultado.

Ahora hice esta otra prueba y obtuve el resultado esperado.

Código SQL [-]
SELECT * 
FROM socios 
WHERE apellidos>=(SELECT MIN(apellidos) FROM socios WHERE apellidos LIKE 'A%')
  AND apellidos<=(SELECT MAX(apellidos) FROM socios WHERE apellidos LIKE 'F%');

Todas mis pruebas las he hecho con oracle 9.2

Última edición por opardor fecha: 24-04-2006 a las 18:09:05. Razón: Me equivoqué al poner las etiquetas
Responder Con Cita
  #6  
Antiguo 24-04-2006
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Hola:

Muchas gracias opardor.

He hecho la prueba con esto que me indicas
Código SQL [-]
with DM.IBDSSocios do
  begin
    SelectSQL.Clear;
    SelectSQL.Add( 'SELECT * FROM socios ' );
    SelectSQL.Add( 'WHERE apellidos>=(SELECT MIN(apellidos) FROM socios WHERE apellidos LIKE :LDESDE)' );
    SelectSQL.Add( 'AND apellidos<=(SELECT MAX(apellidos) FROM socios WHERE apellidos LIKE :LHASTA)' );
    ParamByName('LDESDE').AsString := CBLetraDesde.Text + '%';
    ParamByName('LHASTA').AsString := CBLetraHasta.Text + '%';
  end;

Funciona siempre y cuando haya apellidos con todas las iniciales y la primera o la última de la serie pedida no esté acentuada.

Si por el contrario, escojo por ejemplo listar de la A a la Q y no hay apellidos que empiecen por Q no funciona, la consulta queda vacía.

Tampoco funciona si por ejemplo pido de la A a la D y el primer apellido es con A acentúada, por ejemplo Álvarez.

¿Alguna otra forma de hacerlo funcionar'. Gracias.

Un saludo.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Creador de la Web dice que los Weblogs se acercan a su idea inicial de internet Sasuke_Cub Noticias 1 27-09-2005 10:15:43
Duda con el ámbito de variables cardomjar Varios 6 16-03-2005 12:45:52
Unir dos campos (nombre + apellidos) Tomás Impresión 8 09-02-2004 16:56:32
Cuestión de ámbito jmdd OOP 2 08-02-2004 05:53:12


La franja horaria es GMT +2. Ahora son las 13:34:52.


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