Função MySQL FIND_IN_SET

Resumo : neste tutorial, você aprenderá como usar a FIND_IN_SET() função MySQL para retornar a posição de uma string em uma lista de strings separadas por vírgula.

Introdução à função MySQL FIND_IN_SET()

O MySQL fornece uma função de string integrada chamada FIND_IN_SET()que permite encontrar a posição de uma string dentro de uma lista de strings separadas por vírgula.

O seguinte ilustra a sintaxe da FIND_IN_SETfunção:

FIND_IN_SET(needle,haystack);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A FIND_IN_SETfunção aceita dois parâmetros:

  • needleé a string que você deseja encontrar.
  • haystacké uma lista de strings separadas por vírgula que devem ser pesquisadas.

A FIND_IN_SET()função retorna um número inteiro ou NULLdependendo do valor dos argumentos:

  • Retorne um NULLvalor se needleou haystackfor NULL.
  • Retorne zero se the needlenão estiver em the haystackou haystackfor uma string vazia.
  • Retorne um número inteiro positivo se needleestiver no arquivo haystack.

Observe que a função não funcionará corretamente se needlecontiver uma vírgula ( ,). Além disso, o MySQL usará a otimização aritmética de bits se the needlefor uma string constante e haystackfor uma coluna do tipo SET.

Os exemplos do MySQL FIND_IN_SET()

Vamos dar alguns exemplos para entender como FIND_IN_SETfunciona o MySQL.

1) Exemplos simples de funções FIND_IN_SET()

A instrução a seguir retorna 2 porque ypossui a segunda posição na 'x,y,z'string.

SELECT FIND_IN_SET('y','x,y,z'); -- 2Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

A instrução a seguir retorna 0 porque anão está na 'x,y,z'lista.

SELECT FIND_IN_SET('a','x,y,z');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

A instrução a seguir também retorna 0 porque o segundo argumento está vazio.

SELECT FIND_IN_SET('a','');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

A instrução a seguir retorna NULLporque o primeiro argumento é NULL.

SELECT FIND_IN_SET(NULL,'x,y,z');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

A instrução a seguir também retorna NULLporque o segundo argumento é NULL.

SELECT FIND_IN_SET('a',NULL);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

2) Usando a função FIND_IN_SET() para consultar dados de uma tabela exemplo

Primeiro, crie uma nova tabela nomeada divisionsusando a seguinte instrução.

CREATE TABLE IF NOT EXISTS divisions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(25) NOT NULL,
    belts VARCHAR(200) NOT NULL
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, insira algumas linhas na   divisionstabela.

INSERT INTO divisions(name,belts)
VALUES ('O-1','white,yellow,orange'),
	('O-2','purple,green,blue'),
	('O-3','brown,red,black'),
	('O-4','white,yellow,orange'),
	('O-5','purple,green,blue'),
	('O-6','brown,red'),
	('O-7','black'),
	('O-8','white,yellow,orange'),
	('O-9','purple,green,blue'),
	('O-10','brown,red');
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, encontre a divisão que aceita o redcinto usando a FIND_IN_SET()função:

SELECT 
    name, 
    belts
FROM
    divisions
WHERE
    FIND_IN_SET('red', belts);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Exemplo MySQL FIND_IN_SET

Negando a função FIND_IN_SET()

A FIND_IN_SET()função retorna zero, que está falseno MySQL, quando o primeiro argumento não é encontrado no segundo argumento. Portanto, você pode negar a FIND_IN_SET()função usando o NOToperador.

O exemplo a seguir utiliza o NOToperador com a FIND_IN_SET()função para encontrar as divisões que não aceitam a faixa preta:

SELECT 
    name, belts
FROM
    divisions
WHERE
    NOT FIND_IN_SET('black', belts);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo de função MySQL FIND_IN_SET

Função MySQL FIND_IN_SET() vs. operador IN

O INoperador determina se um valor corresponde a qualquer valor em um conjunto. O exemplo a seguir usa o INoperador para encontrar a divisão cujo nome é O-1ou O-2:

SELECT 
    name, belts
FROM
    divisions
WHERE
    name IN ('O-1' , 'O-2');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Operador MySQL FIND_IN_SET vs IN

Esta instrução usa a FIND_IN_SET()função e retorna o mesmo resultado da consulta acima:

SELECT 
    name, 
    belts
FROM
    divisions
WHERE
    FIND_IN_SET(name, 'O-1,O-2');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Portanto a column IN (x, y, z)expressão é igual a FIND_IN_SET(column, 'x,y,z').

O INoperador pode receber vários argumentos separados por vírgula, enquanto a FIND_IN_SET()função pode receber apenas dois argumentos.

Na prática, você usa o INoperador para combinar um valor com uma lista de valores, você usa a FIND_IN_SET()função para combinar um valor com uma lista de valores separados por vírgula.

Resumo

  • Use a função MySQL FIND_IN_SET()para encontrar uma string em uma lista de strings separadas por vírgula.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *