Usuário com melhor resposta
Função para verificar uma palavra em tabela (blacklist)

Pergunta
-
Pessoal,
Preciso criar uma função que vai verificar se um nickname que está sendo cadastrado tem alguma palavra proibida, exemplo:
Tabela BlackList
Campo id Campo Palavra
1 Zueira
2 Besteira
Se o nickname enviado pelo sistema para verificação tiver uma dessas palavras "contidas" nele retornarei 1, senão retornarei 0.
nickname: azueiragrande => retornaria 1
Tem alguma função do SQL ou alguém já desenvolveu algo parecido??
No meu caso a necessidade é verificar se em um parâmetro enviado têm contidas palavras de BlackList.
Obrigada!!
Jéssica Campanholo
- Editado Jessica Campanholo segunda-feira, 28 de março de 2016 12:33
Respostas
-
Olá, obrigada pela resposta.
Consegui a resolução desse item com a função abaixo que criei:CREATE FUNCTION fn_BlackList(@palabra nvarchar(50))
RETURNS smallintBEGINRETURN (SELECT CASE WHEN SUM(CHARINDEX(texto,@palabra)) > 0 THEN 1 ELSE 0 END from BlackList)
END
-- SELECT [dbo].[fn_BlackList]('aaazueirabbbb')Jéssica Campanholo
- Marcado como Resposta Jessica Campanholo segunda-feira, 28 de março de 2016 15:10
Todas as Respostas
-
A principio penso de você fazer o contrário, que com certeza funcionaria, mas provavelmente não seria a melhor maneira. Isso seria, você usar um "SELECT * FROM tabela" e pegar linha a linha e comparar com a "String" original.
Dessa forma, por exemplo, você faria esse "SELECT" e colocaria ele em um "DataTable", e rodaria esse procedimento em C#:
public static List<int> Verify(string nick, DataTable blacklist) { List<int> Ret = new List<int>(); foreach (DataRow Row in DataTable.Rows) { if (nick.Contains((string)Row[1])) { Ret.Add((int)Row[0]); } } return Ret; }
Entende? Porque o SQL tem um comando "LIKE", que seria uma alternativa, mas a palavra original pode conter a palavra listada, não o oposto, então o uso do "LIKE" teria que ser "expandido". Você teria antes que transformar a "String" de forma que ela possa ser comparada: algo como "azueiragrande" viraria "%a%z%u%e%i%r%a%g%r%a%n%d%e%" (com os caracteres de percentual após cada letra) e o "SELECT" ficaria assim:
SELECT ID FROM tabela WHERE Palavra LIKE '%a%z%u%e%i%r%a%g%r%a%n%d%e%'
O problema com essa opção é a grande possibilidade de falsos positivos no retorno ...
- Sugerido como Resposta Roberto AB Filho segunda-feira, 28 de março de 2016 14:04
- Marcado como Resposta Marcos SJ segunda-feira, 28 de março de 2016 14:29
- Não Marcado como Resposta Jessica Campanholo segunda-feira, 28 de março de 2016 15:09
-
Olá, obrigada pela resposta.
Consegui a resolução desse item com a função abaixo que criei:CREATE FUNCTION fn_BlackList(@palabra nvarchar(50))
RETURNS smallintBEGINRETURN (SELECT CASE WHEN SUM(CHARINDEX(texto,@palabra)) > 0 THEN 1 ELSE 0 END from BlackList)
END
-- SELECT [dbo].[fn_BlackList]('aaazueirabbbb')Jéssica Campanholo
- Marcado como Resposta Jessica Campanholo segunda-feira, 28 de março de 2016 15:10