MySQL Funções: String, Numérica, Definida pelo Usuário, Armazenada

⚡ Resumo Inteligente

MySQL As funções transformam os dados antes de serem armazenados ou recuperados, retornando um único resultado calculado. Este artigo explica as funções de string, numéricas e de data integradas e, em seguida, mostra como as funções armazenadas e definidas pelo usuário estendem o próprio mecanismo do banco de dados.

  • 🔤 Funções de string: UCASE, LCASE e CONCAT remodelam o texto no momento da consulta; atribua um alias à coluna calculada com AS para que o conjunto de resultados contenha um cabeçalho legível.
  • 🔢 Numérico Operatores: DIV realiza a divisão inteira, / retorna o quociente decimal e % (ou MOD) retorna o resto da divisão.
  • 📅 Funções de data: A função DATE_FORMAT converte o valor armazenado no formato AAAA-MM-DD em qualquer formato de exibição, como %d-%m-%Y, sem alterar uma única linha do código do aplicativo.
  • 🛠️ Funções armazenadas: CREATE FUNCTION registra lógica reutilizável dentro do servidor; declare-a como NOT DETERMINISTIC sempre que o corpo chamar CURDATE() ou NOW().
  • ⚙️ Funções definidas pelo usuário: Rotinas externas escritas em C ou C++ são compiladas no servidor e então se comportam exatamente como funções nativas.
  • 🚀 Impacto no desempenho: Ao inserir os cálculos no banco de dados, elimina-se a lógica duplicada de cada aplicativo cliente e reduz-se o número de requisições à rede.

Quais são MySQL Funções?

MySQL pode fazer muito mais do que apenas armazenar e recuperar dados. Ele também pode realizar manipulações nos dados antes de recuperá-lo ou salvá-lo. É aí que MySQL Entram em cena as funções. Funções são simplesmente trechos de código que executam uma operação e retornam um resultado. Algumas funções aceitam parâmetros, enquanto outras não aceitam nenhum.

Vejamos brevemente um exemplo. Por padrão, MySQL Salva dados de data no formato “AAAA-MM-DD”. Suponha que criamos um aplicativo e nossos usuários desejam que a data seja retornada no formato “DD-MM-AAAA”. Podemos usar o MySQL A função integrada DATE_FORMAT permite isso. DATE_FORMAT é uma das funções mais utilizadas em... MySQLE vamos analisar isso em detalhes mais adiante nesta lição.

Independentemente do seu tipo, uma função sempre retorna um único valor, pode aceitar zero ou mais parâmetros dentro dos parênteses, e pode ser usado em qualquer lugar onde uma expressão seja permitida — em uma lista SELECT, uma cláusula WHERE ou uma cláusula ORDER BY.

Por que usar MySQL Funções?

Agora que sabemos o que é uma função, a próxima pergunta é por que deveríamos inserir esse trabalho no banco de dados.

Por que usar MySQL Funções

Conforme mostra o diagrama acima, uma função recebe um valor de entrada, aplica a lógica uma única vez dentro do mecanismo do banco de dados e retorna um único resultado para cada aplicativo que o solicita.

Os programadores podem estar pensando: "Por que se preocupar com isso?" MySQL Funções? O mesmo efeito pode ser alcançado com uma linguagem de script ou de programação.” É verdade que podemos conseguir isso escrevendo um procedimento no programa aplicativo.

Voltando ao nosso exemplo de DATA, para que nossos usuários obtenham os dados no formato desejado, a camada de negócios teria que realizar o processamento necessário por conta própria.

Isso se torna um problema quando a aplicação precisa ser integrada a outros sistemas. Quando usamos MySQL Funções como DATE_FORMAT, essa funcionalidade está incorporada ao banco de dados, e qualquer aplicativo que precise dos dados os recebe no formato necessário. Isso Reduz a necessidade de retrabalho na lógica de negócios e diminui as inconsistências de dados..

Outra razão para considerar MySQL Uma das funções é ajudar a reduzir o tráfego de rede em aplicações cliente/servidor.A camada de negócios só precisa chamar a função armazenada, sem precisar buscar linhas brutas pela rede para manipulá-las. Em média, o uso de funções pode melhorar significativamente o desempenho geral do sistema.

Tipos de MySQL Funções

Com o “o quê” e o “porquê” definidos, podemos agora analisar as três famílias de funções. MySQL Oferece: funções integradas, funções armazenadas e funções definidas pelo usuário.

Funções integradas

MySQL vem com várias funções integradas — funções já implementadas no MySQL servidor. Eles nos permitem realizar muitos tipos de manipulação nos dados e se enquadram nos seguintes grupos comumente usados.

  • Funções de string – operar em tipos de dados string
  • Funções numéricas – operar em tipos de dados numéricos
  • Funções de data – operar em tipos de dados de data
  • Funções agregadas – operar em todos os tipos de dados acima e produzir conjuntos de resultados resumidos.
  • Outras funções - MySQL Também oferece suporte a outros tipos de funções integradas, mas limitaremos esta lição aos grupos mencionados acima.

Vamos agora analisar detalhadamente cada um dos grupos mencionados acima. Explicaremos as funções mais utilizadas usando nosso banco de dados de exemplo “Myflixdb”.

Funções de string

As funções de string operam em valores de texto. Em nossa tabela de filmes, os títulos são armazenados usando uma combinação de letras maiúsculas e minúsculas. Suponha que queiramos uma consulta que retorne os títulos em maiúsculas. A função “UCASE” recebe uma string como parâmetro e converte cada letra em maiúscula, como demonstra o script abaixo.

SELECT `movie_id`, `title`, UCASE(`title`) AS `upper_case_title` FROM `movies`;

AQUI

  • UCASE(`título`) é a função integrada que recebe o título como parâmetro e o retorna em letras maiúsculas.
  • COMO `título_em_maiúsculas` Isso atribui um alias à coluna calculada, de modo que o conjunto de resultados contenha um cabeçalho legível em vez da expressão bruta.

Executando o script acima em MySQL A análise do Workbench com o banco de dados Myflixdb nos fornece os resultados mostrados abaixo.

id_do_filme título título_em_maiúsculas
16 67% culpado 67% CULPADOS
6 Anjos e Demonios ANJOS E DEMÔNIOS
4 Code Nome Black NOME DE CÓDIGO PRETO
5 As filhinhas do papai AS FILHINHAS DO PAPAI
7 Da Vinci Code CÓDIGO DAVINCI
2 Esquecendo Sarah Marshal ESQUECENDO SARAH MARSHAL
9 Honey mooners QUERIDA MOONERS
19 filme 3 FILME 3
1 Piratas do Caribe 4 PIRATAS DO CARIBE 4
18 filme de exemplo FILME DE AMOSTRA
17 O Grande Ditador O GRANDE DITADOR
3 X-Men X-MEN

Vale a pena lembrar de dois companheiros além do UCASE: LCASE Converte uma string para minúsculas, e CONCAT une duas ou mais strings em uma só. Para a lista completa, consulte o MySQL referência de função de string.

Funções numéricas

Como mencionado anteriormente, as funções numéricas operam em tipos de dados numéricos. Também podemos realizar cálculos matemáticos com dados numéricos diretamente em nossas instruções SQL.

Operadores aritméticos

MySQL Suporta os seguintes operadores aritméticos, que podem ser usados ​​para realizar cálculos em instruções SQL.

Nome Descrição
DIV Divisão inteira
/ Divisão
- Subtracção
+ Adição
* Multiplicação
% ou MOD Módulo

Seguem exemplos de cada operador.

Divisão inteira (DIV) — A função DIV descarta a parte fracionária e retorna apenas o número inteiro.

SELECT 23 DIV 6;

A execução do script acima nos dá o seguinte resultado: 3.

Operador de divisão (/) — ao contrário do DIV, o operador de divisão mantém a parte decimal do resultado.

SELECT 23 / 6;

A execução do script acima nos dá o seguinte resultado: 3.8333.

Subtracoperador de ção (-)

SELECT 23 - 6;

A execução do script acima nos dá o seguinte resultado: 17.

Operador de adição (+)

SELECT 23 + 6;

A execução do script acima nos dá o seguinte resultado: 29.

Operador de multiplicação (*)

SELECT 23 * 6 AS `multiplication_result`;

Resultado:

multiplicação_resultado
138

Operador módulo (% ou MOD)

O operador módulo divide N por M e nos dá o resto. Vejamos um exemplo do operador módulo, usando os mesmos valores dos exemplos anteriores.

SELECT 23 % 6;
-- OR, equivalently:
SELECT 23 MOD 6;

A execução de qualquer um dos scripts nos dá o seguinte resultado: 5.

Vejamos agora algumas das funções numéricas comuns em MySQL.

PISO – Esta função remove as casas decimais de um número e o arredonda para baixo, para o número inteiro mais próximo. O script abaixo demonstra sua utilização.

SELECT FLOOR(23 / 6) AS `floor_result`;

Resultado:

resultado_do_piso
3

ROUND – esta função arredonda um número para o número inteiro mais próximo. Como 23 / 6 resulta em 3.8333, a função ARREDONDAR retorna 4, enquanto a função ARREDONDAR.PARA.BAIXO retorna 3 — as duas não são intercambiáveis.

SELECT ROUND(23 / 6) AS `round_result`;

Resultado:

resultado_da_rodada
4

RAND – Esta função gera um número aleatório. Seu valor muda a cada vez que a função é chamada. O script abaixo demonstra seu uso.

SELECT RAND() AS `random_result`;

Funções de data

As funções de data operam em tipos de dados de data e data e hora. DATE_FORMAT é a função que resolve o problema "AAAA-MM-DD versus DD-MM-AAAA" descrito na introdução.

FORMATO DE DATA O script recebe dois parâmetros: o valor da data a ser formatada e uma string de formatação criada a partir de marcadores de posição. O script abaixo retorna cada data de lançamento no formato dia-mês-ano, conforme solicitado pelos nossos usuários.

SELECT `title`, DATE_FORMAT(`date_released`, '%d-%m-%Y') AS `formatted_date`
FROM `movies`;

Os marcadores de formato mais frequentemente utilizados estão listados abaixo.

espaço reservado Significado Saída de exemplo
%d Dia do mês, dois dígitos 04
%m Mês, dois dígitos 08
%Y Ano, quatro dígitos 2012
%M Nome do mês por extenso Agosto
%Dele Hours, minutos, segundos 14:35:09

Outras três funções de data aparecem constantemente no trabalho diário:

  • CURATO() Retorna a data atual no formato AAAA-MM-DD.
  • AGORA() retorna a data atual e tempo.
  • DATEDIFF(d1, d2) Retorna o número de dias entre duas datas — a base de qualquer relatório de aluguel em atraso.

Para a lista completa, consulte o MySQL referência da função de data e hora.

Funções armazenadas

As funções integradas abrangem os casos mais comuns. Quando uma regra de negócio é mais específica, escrevemos a nossa própria — e é para isso que serve uma função armazenada.

As funções armazenadas comportam-se exatamente como as funções internas, com a diferença de que você as define. Uma vez criada, uma função armazenada pode ser usada em instruções SQL exatamente como qualquer outra função. A sintaxe básica é mostrada abaixo.

CREATE FUNCTION sf_name ([parameter(s)])
RETURNS data_type
[DETERMINISTIC | NOT DETERMINISTIC]
BEGIN
    -- procedural statements
END

AQUI

  • “CRIAR FUNÇÃO sf_name ([parâmetro(s)])” é obrigatório e informa o MySQL servidor para criar uma função chamada `sf_name` com parâmetros opcionais definidos dentro dos parênteses.
  • “RETURNS tipo_de_dados” É obrigatório e especifica o tipo de dados que a função retorna.
  • “DETERMINISTA” Declara que a função retorna o mesmo valor sempre que os mesmos argumentos forem fornecidos. “NÃO DETERMINÍSTICO” declara o contrário.
  • “INÍCIO… FIM” Envolve o código procedural que a função executa.

Suponha que queiramos saber quais filmes alugados já passaram da data de devolução. Podemos criar uma função armazenada que aceita a data de devolução como parâmetro e a compara com a data atual no servidor. Se a data atual for posterior à data de devolução, o filme está atrasado e retornamos "Sim"; caso contrário, retornamos "Não".

DELIMITER |
CREATE FUNCTION sf_past_movie_return_date (return_date DATE)
RETURNS VARCHAR(3)
NOT DETERMINISTIC
BEGIN
    DECLARE sf_value VARCHAR(3);
    IF CURDATE() > return_date THEN
        SET sf_value = 'Yes';
    ELSEIF CURDATE() <= return_date THEN
        SET sf_value = 'No';
    END IF;
    RETURN sf_value;
END|
DELIMITER ;

⚠️ Atenção — não rotule esta função como DETERMINÍSTICA. O corpo da função chama CURDATE(), portanto, o mesmo argumento pode retornar “Não” hoje e “Sim” amanhã. Declarar uma função dependente do tempo como DETERMINISTIC induz o otimizador ao erro e é inseguro para replicação baseada em instruções. Use NÃO DETERMINISTA sempre que o corpo chamar CURDATE(), NOW() ou RAND().

A execução do script acima cria a função armazenada `sf_past_movie_return_date`. Vamos testá-la agora.

SELECT `movie_id`, `membership_number`, `return_date`, CURDATE(),
       sf_past_movie_return_date(`return_date`) AS `is_overdue`
FROM `movierentals`;

Executando o script acima em MySQL A análise do Workbench com o banco de dados myflixdb nos fornece os seguintes resultados.

id_do_filme número de membro data de retorno CURATO() está_atrasado
1 1 NULL 04-08-2012 NULL
2 1 25-06-2012 04-08-2012 Sim
2 3 25-06-2012 04-08-2012 Sim
2 2 25-06-2012 04-08-2012 Sim
3 3 NULL 04-08-2012 NULL

Observe as duas linhas NULL. Quando `return_date` é NULL, ambas as comparações resultam em NULL em vez de TRUE ou FALSE, portanto, nenhum dos ramos IF é executado e a função retorna NULL — o resultado esperado, já que um filme não devolvido não tem data de retorno para comparar.

Funções definidas pelo usuário

Quando o SQL sozinho não é rápido o suficiente, MySQL Permite uma terceira opção. Funções definidas pelo usuário (UDFs) são escritas em uma linguagem compilada, como C or C++As UDFs (funções definidas pelo usuário) são integradas a uma biblioteca compartilhada e registradas no servidor. Uma vez adicionadas, são chamadas como qualquer outra função. Como uma UDF é executada como código nativo dentro do processo do servidor, ela é adequada para computação pesada — mas um erro em uma UDF pode travar o servidor, portanto, as UDFs são usadas com muito menos frequência do que as funções armazenadas.

Funções integradas, armazenadas ou definidas pelo usuário: qual você deve usar?

Todas as três famílias retornam um único valor e podem ser chamadas a partir de qualquer instrução SQL, mas diferem em quem as escreve, onde são executadas e no nível de risco que acarretam. A tabela abaixo resume essas diferenças.

Critério Funções integradas Funções armazenadas Funções definidas pelo usuário (UDFs)
Quem escreve isso Enviado com MySQL Você, em SQL Você, em C ou C++
Onde mora Dentro do servidor Dentro do banco de dados, criado com CREATE FUNCTION Biblioteca compartilhada compilada carregada pelo servidor
Uso típico Formatação, matemática, agregação Regras de negócio reutilizáveis, como um cheque em atraso. O SQL não consegue expressar lógica especializada ou que exige muito processamento da CPU.
risco principal nenhum Lento se chamado linha por linha em uma tabela grande. Uma falha na biblioteca pode derrubar o servidor.

Como regra geral, comece com uma função integrada. Se nenhuma for adequada, escreva uma função armazenada para que a regra fique centralizada. Recorra a uma UDF somente quando uma função armazenada for consideravelmente lenta.

Perguntas Frequentes

Uma função deve retornar exatamente um valor e pode ser usada dentro de uma expressão SELECT, WHERE ou ORDER BY. Um procedimento armazenado retorna zero ou vários conjuntos de resultados, não pode ser incorporado em uma expressão e é invocado com a instrução CALL.

Execute o comando DROP FUNCTION IF EXISTS sf_name; em seguida, recrie-o. MySQL Não possui função CREATE OR REPLACE, e a função ALTER apenas modifica características como o comentário ou o tipo de segurança, nunca o corpo da requisição.

Sim, podem. Uma função que envolve uma coluna indexada em uma cláusula WHERE impede isso. MySQL Ao usar esse índice, força-se uma varredura completa. Filtre pela coluna bruta e aplique a função somente na lista SELECT.

Sim. Assistentes de IA podem gerar código CREATE FUNCTION a partir de uma regra em linguagem natural. Sempre revise o corpo gerado para garantir a característica DETERMINISTIC correta, o tratamento de valores NULL e os tipos de dados dos parâmetros antes de executá-lo em um servidor de produção.

Não. Os modelos de IA podem inventar nomes de funções, ignorar casos NULL ou diferenças de versão. Teste cada função gerada em uma cópia dos dados e confirme os resultados com uma consulta que você mesmo escreveu e verificou.

Resuma esta postagem com: