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).