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