Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Buscar Cadenas dentro de un Texto (https://www.clubdelphi.com/foros/showthread.php?t=97996)

Alejandro73 19-02-2026 23:27:27

Buscar Cadenas dentro de un Texto
 
Buenas tardes Foristas

Tengo la siguiente inquietud: en una tabla tengo productos con su respectivo nombre; Ejemplo Filtro Aceite W65/9045 y la búsqueda en el Sp es

Where Nombre like '%'+VariableNombre+'%'

Al realizar la busqueda cuando el usuario ingresa

Filtro en la VariableNombre lo encuentra
Aceite en la VariableNombre lo encuentra
W65/9 en la VariableNombre lo encuentra
Filtro Aceite en la VariableNombre lo encuentra

Pero si escribe Filtro W65 no lo encuenta.

Como puedo separar el texto de la VariableNombre en el SP y asignarlo a variables para poder hacer la consulta y que lo encuentre

Where Nombre like '%'+VariableNombre1+'%'
OR like '%'+VariableNombre2+'%'
OR like '%'+VariableNombre3+'%'


Gracias!!!!!!!

aledieb 20-02-2026 02:01:10

Esto te puede servir aunque es en pascal.
Código Delphi [-]
function SepararPalabrasYPrepararQuery(const Input: string; CondicionAND: boolean = True): string;
var
  Lista: TStringList;
  i: Integer;
  Query: string;
begin
  Result := '';
  Query := '';

  Lista := TStringList.Create;
  try
    Lista.Delimiter       := ' ';
    Lista.StrictDelimiter := True;
    Lista.DelimitedText   := Trim(Input);   // corta espacios múltiples y vacíos

    // Limitamos a 5 palabras Opción personal una limitación que yo obligo.
    if Lista.Count > 5 then
      Lista.Count := 5;

    for i := 0 to Lista.Count - 1 do
    begin
      if i > 0 then
        Query := Query + IfThen(CondicionAND, ' AND ', ' OR ');

      // Escapamos comillas simples
      Lista[i] := StringReplace(Lista[i], '''', '''''', [rfReplaceAll]);
      // acá podes poner otro parámetro para hacerlo más genérica
      Query := Query + ' Nombre LIKE ''%' + Lista[i] + '%''';
      // acá podes poner otro parámetro para hacerlo más genérica
      // quedaria más o menos Query := Query + ' '+snombrecampo +' LIKE ''%' + Lista[i] + '%''';
    end;

    Result := Query;
  finally
    Lista.Free;
  end;
end;
Llamado:
Código Delphi [-]
respuesta:= SepararPalabrasYPrepararQuery('Filtro Aceite W65/9',false);
devuelve:
Código Delphi [-]
"Nombre like '%Filtro%' OR Nombre like '%Aceite%' OR Nombre like '%W65/9%'"
ö
"Nombre like '%Filtro%' AND Nombre like '%Aceite%' AND Nombre like '%W65/9%'"

La idea general me la dio Grok

mamcx 20-02-2026 17:42:09

Si tu motor de BD tiene soporte de "Full text search" es mejor usarlo, como en https://www.postgresql.org/docs/current/textsearch.html

chenech 20-02-2026 21:07:42

Yo lo tengo también asi: Where Nombre like '%'+VariableNombre+'%'
y si quiere buscar palabras escribe "Filtro%W64".
Pero si quieres que no tenga que escribir el %, usa un Replace en el String y cambia espacio por % y te funciona también.
Al final tendria "%Filtro%W64%"


La franja horaria es GMT +2. Ahora son las 21:04:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi