Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Buscar una linea completa en un campo blob (https://www.clubdelphi.com/foros/showthread.php?t=72266)

glopez 07-02-2011 18:19:23

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.

coso 07-02-2011 19:25:08

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.

glopez 07-02-2011 20:47:17

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

coso 08-02-2011 00:23:24

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.

glopez 08-02-2011 10:55:51

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".

coso 08-02-2011 11:25:19

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

coso 08-02-2011 11:37:48

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

guillotmarc 08-02-2011 12:21:18

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';

glopez 08-02-2011 12:24:19

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.

glopez 08-02-2011 12:33:16

Gracias guillotmarc, eso es exactamente lo que quería.

coso 08-02-2011 12:41:43

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.


La franja horaria es GMT +2. Ahora son las 01:04:09.

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