Programación en sql. Concatenación de campos errónea. Solución al problema de búsqueda avanzada

Mi pregunta es si se puede hacer algo así:
select distinct AGR.COD_AGR_FOTO from ARTICULOS A, AGRUPACIONES_FOTO AGR WHERE ((AGR.EXPLICACION + AGR.DES_AGRUPACION + A.DATOS_PARTICULARES) LIKE '%CARTON%')and A.Agrupacion_foto=AGR.COD_AGR_FOTO order by AGR.DES_AGRUPACION
Es que la concatenación de campos no funciona bien, ya que no me busca nada.
¿O es que se puede hacer que otro forma?
Respuesta
1
Ya he leído tu consulta y puedo notar que te pueden estar sucediendo varias cosas como te voy a explicar a continuación:
1. Puede ser posible que en realidad este mal la consulta y el problema este en el join que estas haciendo A.Agrupacion_foto=AGR.COD_AGR_FOTO o lo que estas solicitando en el LIKE no coincide.
2. Puede ser que tengas un problema con el manejador de tu BD y este sea sensible a minúsculas y mayúsculas y no concuerde con lo que tienes en el LIKE.
3.Dependiendo del manejador de BD que estas utilizando la concatenación puede funcionarte de esa manera o es posible que necesites algún tipo de función concat por ejemplo supone que tengo una tabla de datos personales que llamaremos NCDATPERF y una tabla donde esta la información laboral de los empleados que llamaremos NCINFLABF y que vamos a buscar todos los datos laborales de aquellos empleados que tengan el apellido ORTEGA bueno en paradox o interbase funcionaria así de sencillo:
select * from nomcatobj/ncdatperf f1,
nomcatobj/ncinflabf f2
where f1.ctddcm=f2.ctddcm
And f1.ctdapl1 + f1. Ctdapl2 like '%ORTEGA%'
Pero en otro manejador como el as400 tendrías que hacer esto:
select * from nomcatobj/ncdatperf f1,
nomcatobj/ncinflabf f2
where f1.ctddcm=f2.ctddcm
And f1. CTDAPL1 CONCAT STRIP(F1. CTDAPL2) like '%ORTEGA%'
Bueno espero que te sirva de mucho esta explicación.

1 respuesta más de otro experto

Respuesta
1
Yo uso Oracle, y en mi caso la concatenación de campos (cuando estos son char o varchar) es por medio del carácter | y no del +.
Por lo que entiendo, tu buscas que "CARTON" exista en la concatenación de los campos, con lo cual podría ser que tuvieses en Agr. Explicación una "C" y luego en Des_agrupacion una "ARTO" y en Datos_Particulares la "N". Eso es lo que sería una concatenación... otra cosa es que busces que la palabra CARTÓN esté en alguno los campos de tu tabla Agrupaciones_Foto, si es así te recomiendo que use el or. Algo así:
select distinct AGR.COD_AGR_FOTO
from articulos a, agrupaciones_foto agr
where ((agr. Explicación like '%cartón%') or
(agr. Des_agrupacion like '%cartón%') or
(a.datos_particulares like '%carton%')
and A.Agrupacion_foto=AGR.COD_AGR_FOTO
Order by AGR.DES_AGRUPACION
Suerte.
Pablo.
Hola, lo que intento es por ej:
" Caja cartón verde "
Donde "CAJA" puede estar en el campo AGR. Explicación, "carton" en des_agrupacion y "verde" en .datos_particulares con like. Lo que no se si con el + se consigue ese resultado.
Pues como te dije antes el carácter de concatenación en sql estándar no es el + sino el | con lo cual la concatenación sería así
campo1|campo2|campo3 like...
¿Qué sistema gestor de base de datos usas? Oracle, sqlserver, ¿Access...?
Mysql bajo Linux Redhat 6.2
Nunca he usado MySql, con lo cual es posible que la concatenación no se haga como yo te dije.
He encontrado en internet un pequeño manual de MySql y PHP. La dirección es esta:
http://otri.us.es/recursosPHP/manual/index.htm
Ahí he visto que el operador de concatenación en la sintaxis de PHP es el punto, cosa que me ha sorprendido, pero seguiré buscando.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas