Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-02-2011
glopez glopez is offline
Miembro
 
Registrado: ago 2003
Ubicación: Huelva
Posts: 76
Poder: 21
glopez Va por buen camino
Buscar una linea completa en un campo blob

Tengo un campo Blob de tipo texto de la siguiente forma
Registro1:
linea1
linea2

Registro 2:
linea3
linea2 || linea4
... || linea2 || ....
linea5
.
.
.
Lo que necesito hacer es una consulta que me devuelva sólo los registros en los que aparece en una línea sola en el campo blob con el texto que busco. Ej: Si busco "linea2" sólo me debe aparecer el registro 1 y no el 2 aunque en la 2ª linea aparezca ese mismo texto pero hay algo más. Por lo que no puedo utilizar sentencias como:

Código SQL [-]
select * 
from mitabla 
where campo containing 'linea2'
Gracias.

Última edición por ecfisa fecha: 07-02-2011 a las 18:29:06. Razón: Etiquetas SQL
Responder Con Cita
  #2  
Antiguo 07-02-2011
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola,
no se si te he entendido bien, pues si buscas linea2 la estas buscando en todos los registros. De todas maneras, si realmente hay diferencia entre las dos 'linea2' que estas buscando, puedes usar algo como

Código Delphi [-]

select * from tabla where campo like '%linea2%' and not (campo like '%||linea2||%')

vamos, descartar las 'linea2' que son diferentes. Si no hay diferencia, sinceramente no se como podrias buscarlas. Saludos.
Responder Con Cita
  #3  
Antiguo 07-02-2011
glopez glopez is offline
Miembro
 
Registrado: ago 2003
Ubicación: Huelva
Posts: 76
Poder: 21
glopez Va por buen camino
Quizas no me hay explicado bien, lo que intento hacer es buscar que registros contienen una linea de texto en un campo blob pero debe aparecer este texto entero sin nada más en una sóla linea. Aunque este blob puede contener más líneas con otras cosas.

(principio de linea) texto_a buscar (fin de linea)

He probado lo que me planteas pero no funciona.

Gracias
Responder Con Cita
  #4  
Antiguo 08-02-2011
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
vale, ahora te entendi. Si sabes de antemano el valor a buscar, entonces quizas deberias guardar en el campo en cuestion ese valor directamente, sin tener que 'sacarlo' de la tabla en si. Algo asi como

Código Delphi [-]

select campo1, campo2, ('texto a buscar' as campo3) from tabla where tabla.campo3 containing 'texto a buscar'

No conozco bien bien el funcionamiento de los alias, por lo que quiza esta sentencia exactamente te de error, pero la idea es esa. Saludos.
Responder Con Cita
  #5  
Antiguo 08-02-2011
glopez glopez is offline
Miembro
 
Registrado: ago 2003
Ubicación: Huelva
Posts: 76
Poder: 21
glopez Va por buen camino
La consulta que me envías no puede funcionar ya que en el campo3 de todos los registros siempre tiene el mismo valor "texto a buscar".
Responder Con Cita
  #6  
Antiguo 08-02-2011
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
No, en la consulta que estoy haciendo estoy cogiendo los campos1 y campos2 de la tabla, mientras que creo un alias en campo3 con el valor que directamente buscas (y que es el que quieres). veo que no cogiste la idea. Quizas la sintaxis este mal, pero la idea es esa. Un saludo
Responder Con Cita
  #7  
Antiguo 08-02-2011
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
releyendo el primer post...me da que lo mejor es tal cual te respondi: seleccionar los que tienen 'linea2' y descartar los que tienen 'linea2' y algo mas
Responder Con Cita
  #8  
Antiguo 08-02-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola

Prueba esto :

select *
from mitabla
where campo containing 'linea2' || ascii_char(13)

Si buscas las lineas con linea2 + un salto de carro, entonces estarás seguro de que no hay nada más a continuación de ella. Por cierto, prueba también con ascii_char(10), ya que nunca estoy seguro de como se implementan los saltos de línea (hay los CR y los LF).

NOTA: Si tu versión de Firebird no reconoce ascii_char() como una función interna, declárala mediante esta sentencia :

DECLARE EXTERNAL FUNCTION ASCII_CHAR
INTEGER
RETURNS CSTRING(1) FREE_IT
ENTRY_POINT 'IB_UDF_ascii_char' MODULE_NAME 'ib_udf';
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 08-02-2011
glopez glopez is offline
Miembro
 
Registrado: ago 2003
Ubicación: Huelva
Posts: 76
Poder: 21
glopez Va por buen camino
No te preocupes lo voy a solucionar de otra forma, de todas formas comentarte que no puede funcionar lo que me expones ya que si te fijas en mi primer post en ambos registros aparece "linea2" dentro del mismo campo pero tambien en ambos registros aparece más texto ya sea en la misma linea o en otra y like o containing no pueden distinguir si en el memo esta en una sóla linea o esta junto con mas texto. Al menos que haya alguna forma de pasarle el principio y final de linea.

like /n||'linea2'||/n

De todas formas muchas gracias por tu tiempo.
Responder Con Cita
  #10  
Antiguo 08-02-2011
glopez glopez is offline
Miembro
 
Registrado: ago 2003
Ubicación: Huelva
Posts: 76
Poder: 21
glopez Va por buen camino
Gracias guillotmarc, eso es exactamente lo que quería.
Responder Con Cita
  #11  
Antiguo 08-02-2011
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
no nos entendimos desde el principio. La idea era precisamente descartar los que tenian principio i final de linea. Supuse que los representabas con los caracteres ||. En fin, si lo solucionaste, mejor para ti. Un saludo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Buscar texto en un campo blob diegofhernando Conexión con bases de datos 3 25-07-2006 01:53:51
Campo BLOB Loviedo Oracle 1 05-05-2006 10:36:31
Avance de Linea en Campo BLOB AGAG4 Firebird e Interbase 0 21-09-2004 02:14:00
campo blob acertij022 Conexión con bases de datos 1 19-08-2004 00:10:32
Buscar por un campo robero espinoza Conexión con bases de datos 2 01-10-2003 19:21:15


La franja horaria es GMT +2. Ahora son las 11:44:13.


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