Apesar de todas as deficiências, a pesquisa em campo de texto ainda é uma das mais populares. Podemos encontrar tipos de dados string em todos os lugares - nomes, números de contas, endereços, bem como outras informações podem ser armazenadas neste formato. Em consultas na linguagem 1C integrada, para conveniência dos desenvolvedores, é usado um operador especial “LIKE”. Este é um dos comandos mais utilizados, portanto, sem um conhecimento profundo de sua sintaxe e capacidades, será difícil para um programador trabalhar.
Usando o operador LIKE
Antes de usar qualquer operador na prática, você precisa entender claramente sua finalidade, locais de aplicação e sintaxe. O objetivo de usar “LIKE” em uma solicitação 1C é verificar o cumprimento da condição apresentada como modelo. O valor de retorno é do tipo booleano - verdadeiro ou falso - indicando se a condição especificada é verdadeira. O operador LIKE pode ser usado em vários locais de uma consulta:
- No bloco de condições, indicado pela palavra-chave “WHERE”;
- No design da escolha quando então termina;
- Diretamente nos campos de seleção, como resultado da comparação de campos.
A sintaxe de verificação é sempre a mesma e consiste em 3 links. À esquerda está o valor do texto que está sendo verificado, depois o próprio operador “LIKE” e à direita está o modelo que está sendo verificado. Para criar modelos de forma rápida e fácil, existem símbolos especiais que facilitam o desenvolvimento:
- “%” é uma sequência de quaisquer caracteres de comprimento arbitrário. Usado para pesquisar palavras ou números individuais em uma string;
- “_” – qualquer caractere único. Destina-se a indicar a presença de um único personagem;
- “[...]” é uma sequência de caracteres para comparar com um caractere em uma string. Com a ajuda desse padrão, é verificada a correspondência com qualquer um dos caracteres listados entre colchetes. Você também pode especificar um intervalo de números ou letras ([a-g], );
- “[^...]” é o padrão oposto ao anterior. A diferença entre o caractere especificado na linha e os listados entre colchetes é verificada.
Para entender e compreender melhor os princípios de criação de modelos corretos, vejamos alguns exemplos que são frequentemente encontrados na vida dos desenvolvedores. A primeira é quando precisamos selecionar no diretório de nomenclatura todos os itens em cujos nomes aparece a palavra “CUTTER”. Neste caso, precisamos usar LIKE nas condições de consulta:
SELECIONE Nomenclatura.Nome AS Nome FROM Diretório.Nomenclatura AS Nomenclatura ONDE Nomenclatura.Nome SIMILAR a "% CUTTER%"Se removermos ambos os símbolos “%”, a consulta mostrará um produto cujo nome corresponde completamente ao especificado entre aspas. Se deixarmos o template “CUTTER%” ou “%CUTTER”, então o resultado será uma lista de itens terminando ou começando, respectivamente, com uma determinada combinação de caracteres.
Vejamos um problema que pode confundir programadores novatos que não conhecem a sintaxe de consulta. Digamos que você precise encontrar todos os itens que possuem o símbolo “%” em seus nomes. Principalmente para os casos em que é necessário pesquisar caracteres reservados, existe um operador de “caractere especial”. #,\,/,~ e outros caracteres podem ser usados como caracteres especiais, após os quais quaisquer caracteres reservados denotarão simplesmente um sinal.
SELECIONE Nomenclatura.Nome AS Nome FROM Diretório.Nomenclatura AS Nomenclatura WHERE Nomenclatura.Nome SIMILAR a "%#%" CARÁTER ESPECIAL "#"Se você precisar usar um parâmetro em uma pesquisa, então a variável na consulta com o parâmetro SIMILAR será usada por adição. Lembre-se que o parâmetro deve ser do tipo string ou você precisará convertê-lo para string na solicitação. Esta é uma operação bastante complicada e é melhor excluí-la antecipadamente.
SELECIONE Nomenclatura.Nome AS Nome FROM Diretório.Nomenclatura AS Nomenclatura ONDE Nomenclatura.Nome SIMILAR a "%" + &nome + "%"A função SIMILAR é aplicável em todas as versões da plataforma, a partir de 8, e devido à sua aplicabilidade, os desenvolvedores 1C não vão querer alterá-la. É claro que a pesquisa de texto sempre depende da precisão do nome inserido, mas ainda é uma das mais comuns. Nesse sentido, os desenvolvedores profissionais 1C precisam estudar o uso do SIMILAR com todas as suas nuances.
O operador SIMILAR em uma consulta verifica os valores das strings das tabelas quanto à semelhança com um padrão.
É usado da seguinte forma: a string a ser verificada é colocada à esquerda deste operador e o padrão é colocado à direita.
Após a verificação, ele retorna True ou False, respectivamente, e é usado ativamente nas condições.
Os seguintes caracteres de serviço são usados para criar um modelo:
- % (porcentagem) - uma sequência contendo qualquer número de caracteres arbitrários
- _ (sublinhado) - um caractere arbitrário
- […] (um ou mais caracteres entre colchetes) - qualquer caractere listado entre colchetes
Além disso, além de vários símbolos, você pode usar intervalos, por exemplo a-z(A-z), o que significa a presença de um símbolo arbitrário incluído no intervalo, incluindo as extremidades do intervalo. - [^...] (entre colchetes, um sinal de negação seguido por um ou mais caracteres) - qualquer caractere único diferente daqueles listados após o sinal de negação
Os restantes símbolos são utilizados para o fim a que se destinam.
Se for necessário transmitir um dos caracteres de serviço acima como símbolo, então deve ser precedido por<Спецсимвол>. Eu mesmo<Спецсимвол>(qualquer caractere adequado) é definido na mesma instrução após a palavra-chave SPECIAL CHARACTER.
Por exemplo, o padrão “%ABV[abvg]\_abv%” SPECIAL CHARACTER “\” significa uma substring que consiste em uma sequência de caracteres:
letras A; letras B; letras B; um dígito; uma das letras a, b, c ou d; sublinhado; letras a; letras b; cartas v.
Além disso, esta sequência pode ser precedida por um conjunto arbitrário de caracteres.
Procedimento Selecionar AgreementContainingInNameText(mText)
//Na requisição usaremos um template do tipo "%" + mText + "%" Request = New Request; Query.SetParameter("Nome", "%" + Texto + "%"); Request.Text = "SELECT | Contratos. Link, | Contratos. Proprietário | FROM | Diretório. Contratos de Contrapartes AS Contratos | | ONDE | Contratos. Nome SIMILAR & Nome"; Resultado = Consulta.Run(); Seleção = Resultado.Select(); Report("Contratos contendo no nome: " + mText + " possuem as seguintes Contrapartes"); While Selection.Next() Cycle Report("Contraparte: " + Selection.Owner + "; Acordo: " + Selection. Link EndIf; EndProcedure
Vejamos o propósito e o uso do operador condicional GOSTAR(eng. GOSTAR) na linguagem de consulta 1C em exemplos.
Passagem rápida
Propósito
Verifique se o valor da string na solicitação corresponde ao padrão especificado - retorna um valor booleano (TRUE ou FALSE).
- A verificação é independente de caso.
- A consulta usa índices de tabela — não relacionados a índices de pesquisa de texto completo.
- Pode levar muito tempo para ser concluído com tabelas grandes.
- Strings de comprimento ilimitado devem ser convertidas usando a função SUBSTRING
Locais de uso
- Nos termos do operador WHERE
- Nas condições de projeto ESCOLHA QUANDO<>ENTÃO "" OUTRO "" FIM
- Em campos de seleção (por exemplo: Name LIKE &ParameterSimilar to StringSuitable)
Descrição da sintaxe do operador LIKE
O parâmetro do operador deve ser uma string: pode ser especificado como uma constante ou passado como um parâmetro de solicitação.
Os literais (máscaras) listados abaixo podem ser usados juntos ou separadamente.
Especificação exata da string
SELECIONE os 10 primeiros
Chaves.Nome
DE
Directory.Keys AS Chaves
ONDE
Keys.Name SIMILAR a "1" // Equivalente a Keys.Name ="1"
Resultado:
% é um literal que significa um número arbitrário de quaisquer caracteres
SELECIONE os 10 primeiros
Chaves.Nome
DE
Directory.Keys AS Chaves
ONDE
Chaves.Nome LIKE "%"
Resultado: quaisquer 10 itens
_ (sublinhado): correspondência literal com qualquer caractere
Exemplo 1:
SELECIONE os 10 primeiros
Chaves.Nome
DE
Directory.Keys AS Chaves
ONDE
Chaves.Nome LIKE "_"
Exemplo #2: começando com qualquer caractere, seguido por “1” e, em seguida, quaisquer caracteres
SELECIONE os 10 primeiros
Chaves.Nome
DE
Directory.Keys AS Chaves
ONDE
Keys.Name SEMELHANTE a "_1%"
Resultado:
(um ou mais caracteres entre colchetes)
- Cada literal que corresponde a qualquer caractere é usado como um OR.
É aceitável especificar um intervalo, por exemplo a-z,0-5, significando um caractere arbitrário do intervalo especificado
Exemplo
SELECIONE os 10 primeiros
Chaves.Nome
DE
Directory.Keys AS Chaves
ONDE
Keys.Name SEMELHANTE a "[l]%"
Resultado: 10 começando com "l" ou "z"
Exemplo: começando com 5,6,7
SELECIONE os 10 primeiros
Chaves.Nome
DE
Directory.Keys AS Chaves
ONDE
Chaves.Nome LIKE "%"
Resultado:
[^] (entre colchetes há um sinal de escape ^ seguido por um ou mais caracteres)
Equivalente a qualquer caractere (_), exceto os especificados ()
Exemplo
SELECIONE os 10 primeiros
Chaves.Nome
DE
Directory.Keys AS Chaves
ONDE
Keys.Name SIMILAR a "8.[^012]%"//não inclui 8.0,8.1,8.2
Resultado: todos começando com "8." excluindo os indicados
SPECIAL CHARACTER - comando para especificar os caracteres cadastrados acima na requisição
Como símbolo de serviço, é aceitável usar pelo menos: #,~,/,\
Exemplo:
SELECIONE os 10 primeiros
Chaves.Nome
DE
Directory.Keys AS Chaves
ONDE
Keys.Name LIKE "#_" CARÁTER ESPECIAL "#"
Resultado:
Aplicabilidade em plataformas
Parâmetros incorretos LIKE<>>
- Um parâmetro do tipo não string é passado: por exemplo, o número 1 em vez da string “1”
- Um campo do tipo não string é comparado com uma máscara válida (por exemplo, um link) ou ao conectar, o valor não é verificado para IsNUL
Preste atenção no texto do erro onde a pergunta é exibida:
Chaves.Nome SIMILAR<>>&L
Operador COMO permite comparar dados do tipo string em uma consulta localizada à esquerda do operador com dados do tipo string localizados à direita do operador. O resultado da comparação é avaliado como Verdadeiro ou Falso, portanto a comparação pode ser aplicada como uma condição.
Para o operador COMO Existem caracteres de serviço especiais que não são percebidos como uma string:
- Símbolo de porcentagem "%": indica a presença de qualquer número de caracteres arbitrários em uma string
- "[...]" um ou mais caracteres entre colchetes: indica a presença de qualquer (único) dos caracteres listados. Além disso, um intervalo de caracteres pode ser especificado (por exemplo)
- “_” sublinhado: indica a presença de qualquer caractere arbitrário
- Caractere de negação "[^...]": denota a presença de qualquer caractere único diferente daqueles especificados entre colchetes
Recursos de uso com vários SGBDs
IBM DB2"Apenas um parâmetro pode ser colocado à direita do operador SIMILAR. Os únicos caracteres curinga são "_" (sublinhado significando qualquer caractere) e "%" (porcentagem significando uma sequência de quaisquer caracteres).No caso de usar um SGBD " PostgreSQL" ou " Banco de dados Oracle"caracteres especiais "colchetes [...]" são aceitos somente se estiverem especificados no texto da solicitação e NÃO são passados como parâmetro para a solicitação.
Assim, no banco de dados de arquivos, os caracteres especiais serão sempre percebidos da mesma forma e de forma diferente dependendo do SGBD utilizado na versão cliente-servidor.
Exemplo: selecione produtos que contenham o símbolo "%" no nome
SELECIONE | Ref.Link |DE | Diretório. Nomenclatura COMO Ref | Ref.Nome LIKE "%\%" CARÁTER ESPECIAL "\"Exemplo: selecione produtos cujos nomes comecem com a palavra “Tanque”
SELECIONE | Ref.Link |DE | Diretório. Nomenclatura COMO Ref | Nome de referência SEMELHANTE a "Bak%"Exemplo: selecione produtos cujos nomes terminam com um número
SELECIONE | Ref.Link |DE | Diretório. Nomenclatura COMO Ref | Ref.Nome LIKE "%"Às vezes surge uma situação quando em 1C 8.3 ou 8.2 você precisa fazer uma seleção, por exemplo, de um diretório de todos os elementos que possuem a palavra “esmalte” em seu nome. Ou, no diretório, selecione todos os empreiteiros cujos sobrenomes contenham a palavra “Ivan”. Em geral, verifique algum valor de string.
Para tanto, existe um operador nas consultas 1C 8.3 e 8.2 - “Similar”. É utilizado, respectivamente, nas seguintes condições:
Obtenha 267 videoaulas em 1C gratuitamente:
Como usar modelos em consultas 1C?
Para gerar uma condição de seleção, é necessário passar um determinado modelo como parâmetro. Para criar um modelo, existem os chamados símbolos de serviço.
Por exemplo, o caractere "%" permite qualquer sequência de caracteres arbitrários:
Existem outros caracteres especiais:
- % (porcentagem) – permite qualquer sequência de caracteres arbitrários;
- _ (sublinhado) - qualquer caractere único;
- […] – um caractere arbitrário dentre os listados entre colchetes. Além de listar caracteres, você pode usar intervalos. Exemplo: a-o;
- [^...] – igual ao anterior, mas ao contrário. O sinal "^" significa negação.