Função MATCH( )

Retorna um valor lógico indicando se o valor especificado corresponde a algum dos valores com os quais está sendo comparado.

Sintaxe

MATCH(valor_de_comparação; teste <;...n>)

Parâmetros

Nome Tipo Descrição
valor_de_comparação

caractere

numérico

datahora

O campo, expressão ou valor literal a ser testado por correspondência.
teste <,...n>

caractere

numérico

datahora

O campo, expressão ou valor literal a ser comparado com o valor_comparacao.

É possível especificar quantos valores de teste forem necessários, mas todos os valores especificados devem ser do mesmo tipo de dados:

MATCH(valor_de_comparação; `20140930`; `20141030`)

Nota

As entradas para a função MATCH( ) podem ser dados de caractere, numéricos ou datahora. Não é possível misturar tipos de dados. Todas as entradas devem pertencer à mesma categoria de dados.

Saída

Lógico. Retorna V (verdadeiro), se for encontrada pelo menos uma correspondência e F (falso), caso contrário.

Exemplos

Exemplos básicos

Nota

Os valores de retorno das comparações de caracteres assumem que SET EXACT está em OFF (a configuração padrão), exceto onde observado.

Teste de valores literais

Retorna T:

MATCH("ABC"; "BCD"; "CDE"; "AB")

Retorna F:

MATCH(98; 99; 100; 101)

Teste de um campo

Retorna T para todos os registros que contêm "Fortaleza", "Rio de Janeiro" ou "Belo Horizonte" no campo Cidade_Fornecedor. Caso contrário, retorna F:

MATCH(Cidade_Fornecedor; "Rio de Janeiro"; "São Paulo"; "Belo Horizonte")

Retorna T para todos os registros que não contêm "Fortaleza", "Rio de Janeiro" ou "Belo Horizonte" no campo Cidade_Fornecedor. Caso contrário, retorna F:

NOT MATCH(Cidade_Fornecedor; "Rio de Janeiro"; "São Paulo", "Belo Horizonte")

Retorna T para todos os registros que contêm "FORTALEZA", "RIO DE JANEIRO" ou "BELO HORIZONTE" no campo Cidade_Fornecedor, independentemente de os caracteres do campo serem maiúsculas ou minúsculas. Caso contrário, retorna F:

Os valores no campo Cidade_Fornecedor serão convertidos em maiúsculas antes de serem comparados com os nomes das cidades em maiúsculas.

MATCH(UPPER(Cidade_Fornecedor), "SÃO PAULO", "RIO DE JANEIRO", "BELO HORIZONTE")

Teste de vários campos

Retorna T para todos os registros que contêm "Fortaleza" nos campos Cidade_Fornecedor, Cidade ou Cidade_2. Caso contrário, retorna F:

MATCH("Rio de Janeiro"; Cidade_Fornecedor; Cidade; Cidade_2)

Comportamento do SET EXACT

Retorna T para todos os registros com código de produto "A", "D" ou "F" ou códigos de produto começando com "A", "D" ou "F" no campo Codigo_Produto. Caso contrário, retorna F:

MATCH(Codigo_Produto; "A"; "D"; "F")

Retorna T para todos os registros com código de produto de um caractere "A", "D" ou "F" no campo Codigo_Produto. Retorna F em outros casos (SET EXACT deve estar em ON):

MATCH(Codigo_Produto; "A"; "D"; "F")

Comparação de dois campos

Retorna T para todos os registros que contêm endereços de fornecedor e de colaborador idênticos. Caso contrário, retorna F:

Pode ser necessário usar outras funções para padronizar o formato dos endereços de fornecedores e de colaboradores.

MATCH(Endereço_Fornecedor; Colaborador_Endereço)

Comparação de datas

Retorna T para todos os registros com data de fatura entre 30 de Set de 2014 e 30 de Out de 2014. Caso contrário, retorna F:

MATCH(Data_Fatura; `20140930`; `20141030`)

Exemplos avançados

Extração de registros de inventário anômalos

Use a instrução IF e a função MATCH( ) para extrair registros que contêm diferentes valores no campo Valor_pelo_Custo_Inventário e no campo calculado Custo_x_Quantidade:

EXTRACT RECORD IF NOT MATCH(Valor_pelo_Custo_Inventário; Custo_x_Quantidade) TO "Valores_não_correspondentes"

Extração dos registros dos departamentos 101, 103 e 107

Use uma instrução IF e a função MATCH( ) para extrair apenas os registros associados com os departamentos 101, 103 ou 107:

EXTRACT RECORD IF MATCH(Depto; "101"; "103"; "107") TO "Tres_Departamentos"

Observações

Use MATCH( ) em vez do operador OR

Você pode usar a função MATCH( ) em vez de expressões que utilizam o operador OR.

Por exemplo:

MATCH(Cidade; "Fortaleza"; "Rio de Janeiro"; "Belo Horizonte")

equivale a

Cidade="Fortaleza" OR Cidade="Rio de Janeiro" OR City="Belo Horizonte"

Precisão decimal de entradas numéricas

Quando as entradas numéricas em comparação têm diferentes precisões de decimais, a comparação usa o nível mais alto de precisão.

Retorna T, pois 1,23 é igual a 1,23:

MATCH(1,23; 1,23; 1,25)

Retorna F, pois 1,23 é diferente de 1,234 quando a terceira casa decimal é considerada:

MATCH(1,23; 1,234; 1,25)

Parâmetros de caracteres

Diferenciação de maiúsculas e minúsculas

A função MATCH( ) diferencia maiúsculas de minúsculas quando utilizada com dados de caracteres. Na comparação de caracteres, "a" não é equivalente a "A".

Retorna F:

MATCH("a";"A";"B";"C")

Se você estiver trabalhando com dados com inconsistência entre maiúsculas e minúsculas, poderá usar a função UPPER( ) para converter os valores para que fiquem consistentes antes de usar MATCH( ).

Retorna T:

MATCH(UPPER("a"); UPPER("A"); UPPER("B");  UPPER("C"))

Correspondência parcial

A correspondência parcial é suportada para comparações de caracteres. Qualquer um dos valores sendo comparado pode estar contido no outro valor e ser considerado uma correspondência.

Ambos os exemplos retornam T:

MATCH("AB"; "ABC")
MATCH("ABC"; "AB")

Nota

O valor mais curto deve aparecer no início do valor mais longo para constituir uma correspondência.

Correspondência parcial e SET EXACT

A correspondência parcial é ativada quando SET EXACT = OFF, que é a configuração padrão do Analytics. Se SET EXACT = ON, a correspondência parcial é desativada e os valores em comparação devem corresponder exatamente para que a correspondência seja considerada.

Os dois exemplos acima resultam em Falso quando o SET EXACT está em ON.

Para obter mais informações sobre o SET EXACT (a opção Comparações exatas de caractere), consulte Comando SET.

Ativação ou desativação de SET EXACT

Para ter certeza de que a opção Comparações exatas de caractere não seja usada com a função MATCH( ), verifique se a opção está desmarcada na guia Tabela na caixa de diálogo Opções (Ferramentas > Opções).

Caso um script esteja sendo utilizado, o comando SET EXACT OFF pode ser adicionado antes da função MATCH( ). Se necessário, você pode restaurar o estado anterior com o comando SET EXACT ON.

Parâmetros de datahora

Um campo de data, datahora ou hora especificado como entrada de função pode usar qualquer formato de data, datahora ou hora desde que a definição do campo defina corretamente o formato.

Combinação de entradas de dados, datahora e hora

É possível misturar valores de datas, datahora e horas nas entradas da função MATCH( ), mas a mistura desses subtipos de Datahora pode proporcionar resultados sem significado.

O Analytics usa equivalentes a números seriais para processar cálculos de data hora. Mesmo que você tenha interesse apenas na parte de data de um valor de datahora, a parte de hora continua a participar do cálculo.

Considere os exemplos a seguir:

Retorna T, pois 31 de dezembro de 2014 corresponde ao segundo valor de teste:

MATCH(`20141231`;`20141229`;`20141231`)

Retorna F, mesmo se o valor_de_comparação e o segundo valor de teste tiverem uma data idêntica de 31 de dezembro de 2014:

MATCH(`20141231 120000`;`20141229`;`20141231`)

Se examinarmos o equivalente ao número serial dessas duas expressões, poderemos perceber por que a segunda será avaliada como falso.

Retorna T, pois o número de série valor_de_comparação é igual ao segundo número de série teste:

MATCH(42003,000000; 42001,000000; 42003,000000)

Retorna F, pois o número de série valor_de_comparação não é igual a nenhum dos valores de teste:

MATCH(42003,500000; 42001,000000; 42003,000000)

A parte da data dos números de série 42003,500000 e 42003,000000 corresponde, mas as partes de hora não. 0,500000 é o equivalente ao número serial 12:00 PM.

Harmonizar subtipos de datahora

Para evitar os problemas que podem ser causados pela mistura de subtipos de datahora, você pode usar funções para harmonizá-los.

Por exemplo, essa expressão, que usa os mesmos valores iniciais do segundo exemplo acima, é avaliada como T em vez de F:

MATCH(CTOD(DATE(`20141231 120000`;"YYYYMMDD");"YYYYMMDD");`20141229`; `20141231`)

Especificação de um valor literal de data, datahora ou hora

Ao especificar um valor literal de data , datahora ou hora para qualquer uma das entradas de função, você fica restrito aos formatos na tabela abaixo e o valor deve estar entre apóstrofos invertidos – por exemplo, `20141231`.

Não use separadores como barras (/) ou dois pontos (:) entre os componentes individuais de datas ou horas.

  • Valores de datahora – você pode usar qualquer combinação de formatos de data, separador e hora listados na tabela abaixo. A data deve preceder a hora e um separador deve ser usado entre os dois. Os separadores válidos são um único espaço em branco ou as letras 't' ou 'T'.

  • Valores de tempo – as horas devem ser especificadas usando o relógio de 24 horas. Os ajustes do Tempo Universal Coordenado (UTC) devem ser precedidos por um sinal de mais (+) ou de menos (-).

    Exemplos de formato

    Exemplos de valores literais

    AAAAMMDD

    `20141231`

    AAMMDD

    `141231`

    AAAAMMDD hhmmss

    `20141231 235959`

    AAMMDDthhmm

    `141231t2359`

    AAAAMMDDThh

    `20141231T23`

    AAAAMMDD hhmmss+/-hhmm

    (ajuste UTC)

    `20141231 235959-0500`

    AAMMDD hhmm+/-hh

    (ajuste UTC)

    `141231 2359+01`

    thhmmss

    `t235959`

    Thhmm

    `T2359`

    Nota

    Não use somente hh no formato de hora principal com dados que têm um ajuste UTC. Por exemplo, evite: hh+hhmm. Os resultados podem ser não confiáveis.