Operador LIKE em consultas SQL no Delphi

Veja neste artigo como realizar a verificação de coincidências de pares em valores string através do operador LIKE em consultas SQL no Delphi.

Na SQL (Structured Query Language, ou Linguagem de Consulta Estruturada) através do comando SELECT é possível implementar consultas para recuperar, de acordo com os critérios desejados, os dados existentes em um banco de dados.

A estrutura básica de uma consulta em SQL consiste em três cláusulas: SELECT, FROM e WHERE. Onde:

Por exemplo:

1) Para recuperar todos os registros da tabela "employee", ordenando o resultado pelo campo "first_name" e apresentando no resultado somente os campos "first_name", "last_name" e "dept_no":

Listagem 1: Select básico sem where

select first_name, last_name, dept_no from employee order by first_name

2) Para recuperar todos os registros da tabela "employee" para os quais o valor do campo "salary" pertença ao intervalo fechado de 80000.00 até 90000.00:

Listagem 2: Select usando between

select * from employee where salary between 80000.00 and 90000.00

Operador LIKE

Em consultas SQL as expressões com strings mais usadas são as checagens para verificação de coincidências de pares, usando o operador LIKE combinado com os caracteres especiais porcentagem (%) e sublinhado (_). O caractere % é utilizado para indicar a posição (no início, em qualquer posição ou no final) que um conteúdo será procurado no valor string do campo especificado enquanto que o caractere _ indica o número de caracteres envolvidos na pesquisa.

Na Tabela 1 pode-se observar exemplos de expressões com strings usando o operador LIKE.



ExpressãoResultado
LIKE 'Juca%'Qualquer string que iniciem com Juca.
LIKE '%Silva'Qualquer string que terminem com Silva.
LIKE '%Santos%'Qualquer string que tenha Santos em qualquer posição.
LIKE 'A_'String de dois caracteres que tenham a primeira letra A e o segundo caractere seja qualquer outro.
LIKE '_A'String de dois caracteres cujo primeiro caractere seja qualquer um e a última letra seja a letra A.
LIKE '_A_'String de três caracteres cuja segunda letra seja A, independentemente do primeiro ou do último caractere.
LIKE '%A_'Qualquer string que tenha a letra A na penúltima posição e a última seja qualquer outro caractere.
LIKE '_A%'Qualquer string que tenha a letra A na segunda posição e o primeiro caractere seja qualquer outro caractere.
LIKE '___'Qualquer string com exatamente três caracteres.
LIKE '___%'Qualquer string com pelo menos três caracteres.
LIKE '%''%'Qualquer string que tenha o caractere ' em qualquer posição.

Tabela 1: Expressões com strings usando o operador LIKE

É importante destacar que comparações com strings geralmente são sensíveis ao tamanho da letra; isto é, minúsculas não são iguais a maiúsculas, e vice-versa.

Para comparações que envolvam os caracteres especiais % e _, a SQL permite o uso de um caractere de escape (\). Esse caractere é usado imediatamente antes do caractere especial que deverá ser tratado como um caractere normal, como pode ser observado nos exemplos apresentados na Tabela 2.

ExpressãoResultado
LIKE 'ab\%cd%'Qualquer string que comece por ab%cd.
LIKE 'ab\\cd%'Qualquer string que comece por ab\cd.

Tabela 2: Outras expressões com strings usando o operador LIKE

A SQL permite pesquisar diferenças em vez de coincidências, por meio do uso do operador de comparação NOT LIKE.

Estudo de caso: Operador LIKE em consultas SQL no Delphi

Na aplicação, apresentada na Figura 1, foi utilizada a tecnologia ADO para configurar o acesso ao banco de dados Microsoft Access "dbdemos.mdb".


Figura 1: Projetando a aplicação Operador LIKE em consultas SQL no Delphi

Na interface da aplicação (Figura 1) também foram disponibilizados os seguintes componentes:

A Listagem 3 apresenta o código completo da unit do formulário da aplicação (Figura 1) desenvolvida para demonstrar a utilização do operador LIKE em consultas SQL no Delphi. Como principal aspecto da programação, a definição da expressão usada na cláusula WHERE é realizada no evento OnChange do componente Edit e também no evento OnClick do componente RadioGroup de acordo com as seguintes escolhas do usuário final:

A função QuotedStr no Delphi retorna a string que é informada como parâmetro entre aspas simples. E a função ucase no banco de dados Microsoft Access realiza a conversão de valores string de minúsculas para maiúsculas.

Listagem 3: Código da aplicação “Operador LIKE em Consultas SQL no Delphi”

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, DB, ADODB, Grids, DBGrids, StdCtrls, Buttons; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; BitBtn2: TBitBtn; DBGrid1: TDBGrid; ADOConnection1: TADOConnection; DataSource1: TDataSource; ADOQuery1: TADOQuery; ADOQuery1CustNo: TFloatField; ADOQuery1Company: TWideStringField; ADOQuery1Contact: TWideStringField; DBNavigator1: TDBNavigator; RadioGroup1: TRadioGroup; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Edit1Change(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); begin ADOQuery1.Open; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ADOQuery1.Close; end; // Evento OnChange do componente Edit que também está // ligado ao evento OnClick do componente RadioGroup. procedure TForm1.Edit1Change(Sender: TObject); var sql: string; begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select * from customer'); // opções da verificação, RadioGroup1.ItemIndex: // 0: no início // 1: em qualquer posição // 2: no final // A função QuotedStr, retorna a string que é informada // como parâmetro entre aspas simples. // ucase: conversão de minúsculas para maiúsculas no BD MS Access if (RadioGroup1.ItemIndex = 0) then sql := 'where ucase(company) like '+QuotedStr(Edit1.Text+'%') else if (RadioGroup1.ItemIndex = 1) then sql := 'where ucase(company) like '+QuotedStr('%'+Edit1.Text+'%') else sql := 'where ucase(company) like '+QuotedStr('%'+Edit1.Text); ADOQuery1.SQL.Add(sql); ADOQuery1.SQL.Add('order by company'); ADOQuery1.Open; end; end.

Na Figura 2 pode-se observar a aplicação em tempo de execução apresentando os registros da tabela "employee" que no campo "Company" apresentam SCUBA em qualquer posição. Por exemplo, no início em "SCUBA Heaven", no meio em "American SCUBA Supply" e no final em "On-Target SCUBA". O resultado conquistado neste exemplo de execução equivale a seguinte instrução SQL:

Listagem 4: Exemplo de select com where e %

select * from customer where ucase(company) LIKE '%SCUBA%' order by company

Figura 2: Executando a aplicação Operador LIKE em consultas SQL no Delphi

Referência

Obrigado e um abraço.


Artigos relacionados