Ver Mensaje Individual
  #2  
Antiguo 20-02-2026
aledieb aledieb is offline
Miembro
 
Registrado: jun 2005
Ubicación: Buenos Aires, Argentina
Posts: 147
Reputación: 21
aledieb Va por buen camino
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
__________________
Suerte
Alejandro

Última edición por aledieb fecha: 20-02-2026 a las 02:24:42.
Responder Con Cita