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_SET
função:
FIND_IN_SET(needle,haystack);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A FIND_IN_SET
funçã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 NULL
dependendo do valor dos argumentos:
- Retorne um
NULL
valor seneedle
ouhaystack
forNULL
. - Retorne zero se the
needle
não estiver em thehaystack
ouhaystack
for uma string vazia. - Retorne um número inteiro positivo se
needle
estiver no arquivohaystack
.
Observe que a função não funcionará corretamente se needle
contiver uma vírgula ( ,
). Além disso, o MySQL usará a otimização aritmética de bits se the needle
for uma string constante e haystack
for uma coluna do tipo SET
.
Os exemplos do MySQL FIND_IN_SET()
Vamos dar alguns exemplos para entender como FIND_IN_SET
funciona o MySQL.
1) Exemplos simples de funções FIND_IN_SET()
A instrução a seguir retorna 2 porque y
possui a segunda posição na 'x,y,z'
string.
SELECT FIND_IN_SET('y','x,y,z'); -- 2
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução a seguir retorna 0 porque a
nã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 )
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 )
A instrução a seguir retorna NULL
porque o primeiro argumento é NULL
.
SELECT FIND_IN_SET(NULL,'x,y,z');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução a seguir também retorna NULL
porque o segundo argumento é NULL
.
SELECT FIND_IN_SET('a',NULL);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
2) Usando a função FIND_IN_SET() para consultar dados de uma tabela exemplo
Primeiro, crie uma nova tabela nomeada divisions
usando 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 divisions
tabela.
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 red
cinto 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 )
Negando a função FIND_IN_SET()
A FIND_IN_SET()
função retorna zero, que está false
no MySQL, quando o primeiro argumento não é encontrado no segundo argumento. Portanto, você pode negar a FIND_IN_SET()
função usando o NOT
operador.
O exemplo a seguir utiliza o NOT
operador 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 )
Função MySQL FIND_IN_SET() vs. operador IN
O IN
operador determina se um valor corresponde a qualquer valor em um conjunto. O exemplo a seguir usa o IN
operador para encontrar a divisão cujo nome é O-1
ou O-2
:
SELECT
name, belts
FROM
divisions
WHERE
name IN ('O-1' , 'O-2');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
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 IN
operador 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 IN
operador 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.