MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MariaDB FIELD() vs FIND_IN_SET():Qual é a diferença?


Duas funções semelhantes no MariaDB são FIELD() e FIND_IN_SET() . À primeira vista, estes parecem fazer a mesma coisa, mas há uma diferença.

Este artigo analisa a diferença entre essas duas funções.

Sintaxe e Definições


Primeiro, vamos ver a sintaxe e a definição de cada função:
Função Sintaxe Definição
FIELD() FIELD(pattern, str1[,str2,...]) Retorna a posição do índice da string ou número que corresponde ao padrão fornecido.
FIND_IN_SET() FIND_IN_SET(pattern, strlist) Retorna a posição do índice onde o padrão especificado ocorre em uma lista de strings.

Ambas as funções aceitam um pattern como seu primeiro argumento. No entanto, é o que vem a seguir que destaca suas diferenças:
  • FIELD() aceita uma ou mais strings, separadas por vírgula.
  • FIND_IN_SET() aceita uma única lista de strings.

Exemplo


Aqui está um exemplo que demonstra a diferença entre essas duas funções:
SELECT 
    FIELD('bat', 'cat','dog','bat') AS "FIELD()",
    FIND_IN_SET('bat', 'cat,dog,bat') AS "FIND_IN_SET()";

Resultado:
+---------+---------------+
| FIELD() | FIND_IN_SET() |
+---------+---------------+
|       3 |             3 |
+---------+---------------+

Cada função retornou o mesmo resultado, mas cada função aceitou as strings em um formato diferente.

Os valores fornecidos para FIELD() veio como três argumentos separados, enquanto os valores fornecidos para FIND_IN_SET() veio como uma única lista de strings (que continha os valores separados).