MySQL: Um guia completo sobre as funções integradas do…

Última atualização: 2026-08-26

As funções são o canivete suíço do SQL — elas cuidam da transformação, formatação e cálculos dos dados.

Esta aula oferece uma visão geral sistemática das funções embutidas mais utilizadas no MySQL.

100%
graph TB
    A[MySQL Built-in Functions] --> B[Mathematical Functions<br/>ROUND/CEIL/FLOOR/RAND]
    A --> C[String Functions<br/>CONCAT/LENGTH/SUBSTRING]
    A --> D[Date Functions<br/>NOW/DATE_FORMAT/DATEDIFF]
    A --> E[Conditional Functions<br/>IF/IFNULL/CASE]
    A --> F[Aggregate Functions<br/>COUNT/SUM/AVG/MAX/MIN]
    A --> G[Type Conversion<br/>CAST/CONVERT]

1. O que você vai aprender


2. Histórias reais sobre limpeza de dados

(1) Problema: Formatos de dados inconsistentes

Dados de cadastro do usuário:

nome telefone data_de_criação
John 138-0000-1111 03/07/2026
Jane 13800002222 3 de julho de 2026

Os números de telefone estão formatados de maneira inconsistente, e as datas, de forma aleatória.

(2) Resolução de funções

SQL
-- Standardize Phone Number Formats
SELECT name, REPLACE(phone, '-', '') AS clean_phone FROM users;

-- Standardize Date Formats
SELECT name, STR_TO_DATE(created_at, '%Y/%m/%d') AS clean_date FROM users;

3. Funções matemáticas

Função Descrição Exemplo
Arredondamento para o número de casas decimais especificado.
ROUND(x, d) Arredondar para d casas decimais ROUND(3.1415, 2) → 3,14
CEIL(x) Resumo CEIL(3.1) → 4
FLOOR(x) Arredondar para baixo FLOOR(3.9) → 3
ABS(x) Valor absoluto ABS(-5) → 5
MOD(a, b) Módulo MOD(10, 3) → 1
POWER(x, y) Operação de potência POWER(2, 3) → 8
SQRT(x) raiz quadrada SQRT(16) → 4
RAND() Número aleatório entre 0 e 1 RAND() → 0,723...

▶ Exemplo: Aplicações das funções matemáticas

SQL
-- Calculate the discounted price and round it off
SELECT 
    product_name,
    price,
    ROUND(price * 0.85, 2) AS sale_price
FROM products;

-- Calculate the number of pages (Round up)
SELECT CEIL(103 / 10) AS total_pages;  -- 11 pages

-- Random sort
SELECT * FROM users ORDER BY RAND() LIMIT 5;
▶ Experimente

4. Funções de cadeia de caracteres

Função Descrição Exemplo
CONCAT(s1, s2, ...) Concatenar cadeias de caracteres CONCAT('Hello', ' ', 'World')
CONCAT_WS(sep, s1, ...) Concatenar usando um separador CONCAT_WS('-', '2026', '07', '03')
LENGTH(s) Comprimento em bytes LENGTH('Hello') → 5
CHAR_LENGTH(s) Comprimento do caractere CHAR_LENGTH('你好') → 2
UPPER(s) Converter para maiúsculas UPPER('hello') → HELLO
LOWER(s) Converter para letras minúsculas LOWER('HELLO') → hello
TRIM(s) Remover espaços à esquerda e à direita TRIM(' hi ') → oi
LTRIM(s) Remover espaços à esquerda LTRIM(' hi') → oi
RTRIM(s) Remover espaços à direita RTRIM('hi ') → oi
SUBSTRING(s, pos, len) Subsequência SUBSTRING('Hello', 2, 3) → ell
LEFT(s, n) n caracteres à esquerda LEFT('Hello', 3) → Ajuda
RIGHT(s, n) n caracteres à direita RIGHT('Hello', 3) → llo
REPLACE(s, old, new) Substituir REPLACE('Hi World', 'Hi', 'Hello')
REVERSE(s) Reverso REVERSE('Hello') → olleH
LPAD(s, len, pad) Preenchimento à esquerda LPAD('5', 3, '0') → 005
RPAD(s, len, pad) Preenchimento à direita RPAD('Hi', 5, '.') → Oi...

▶ Exemplo: Aplicações das funções de cadeia de caracteres

SQL
-- Full name (combined)
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

-- Clean phone numbers
SELECT REPLACE(REPLACE(phone, '-', ''), ' ', '') AS clean_phone FROM users;

-- Extract the email domainSELECT 
    email,
    SUBSTRING(email, LOCATE('@', email) + 1) AS domain
FROM users;

-- Generate order number
SELECT CONCAT('ORD', LPAD(id, 6, '0')) AS order_no FROM orders;
▶ Experimente

Saída:

TEXT 📖 Somente leitura
+-------------+------------+
| email       | domain     |
+-------------+------------+
| a@gmail.com | gmail.com  |
| b@163.com   | 163.com    |
+-------------+------------+

5. Funções de data

Função Descrição Exemplo
NOW() Data e hora atuais 2026-07-03 10:30:00
CURDATE() Data atual 2026-07-03
CURTIME() Hora atual 10:30:00
DATE(dt) Extrair a parte da data DATE('2026-07-03 10:30:00')
YEAR(dt) Ano de extração YEAR('2026-07-03') → 2026
MONTH(dt) Extrair mês MONTH('2026-07-03') → 7
DAY(dt) Data de extração DAY('2026-07-03') → 3
HOUR(dt) Extrair horas HOUR('10:30:00') → 10
DATE_FORMAT(dt, fmt) Formato da data DATE_FORMAT(NOW(), '%Y-%m-%d')
STR_TO_DATE(s, fmt) Converter string em data STR_TO_DATE('2026-07-03', '%Y-%m-%d')
DATEDIFF(d1, d2) Diferença de datas (dias) DATEDIFF('2026-07-10', '2026-07-03') → 7
DATE_ADD(dt, INTERVAL) Data de adição DATE_ADD(NOW(), INTERVAL 7 DAY)
DATE_SUB(dt, INTERVAL) Subtração de datas DATE_SUB(NOW(), INTERVAL 1 MONTH)
TIMESTAMPDIFF(unit, d1, d2) Diferença de horário TIMESTAMPDIFF(YEAR, birth, CURDATE())

▶ Exemplo: Como usar funções de data

SQL
-- Check today's data
SELECT * FROM orders WHERE DATE(created_at) = CURDATE();

-- View recent 7 days
SELECT * FROM orders WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY);

-- Monthly Statistics
SELECT 
    DATE_FORMAT(order_date, '%Y-%m') AS month,
    COUNT(*) AS order_count,
    SUM(amount) AS total_amount
FROM orders
GROUP BY month
ORDER BY month;

-- Calculate Age
SELECT 
    name,
    birth_date,
    TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age
FROM users;
▶ Experimente

Saída:

TEXT 📖 Somente leitura
+---------+-------------+--------------+
| month   | order_count | total_amount |
+---------+-------------+--------------+
| 2026-01 |         120 |     45000.00 |
| 2026-02 |         135 |     52000.00 |
| 2026-03 |         148 |     58000.00 |
+---------+-------------+--------------+

▶ Exemplo: Formatação de datas

SQL
-- Common Formats
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');           -- 2026-07-03
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d');           -- 2026/07/03
SELECT DATE_FORMAT(NOW(), '%H:%i:%s');           -- 10:30:00
SELECT DATE_FORMAT(NOW(), '%W, %M %d, %Y');     -- Friday, July 03, 2026
▶ Experimente

6. Funções condicionais

Função Descrição Exemplo
IF(expr, t, f) Instruções condicionais IF(score >= 60, 'Pass', 'Fail')
IFNULL(expr, alt) Substituição por NULL IFNULL(email, 'N/A')
NULLIF(a, b) Retorna NULL NULLIF(1, 1) → NULL
CASE WHEN ... THEN ... END Avaliação de múltiplas condições Veja o exemplo

▶ Exemplo: Funções condicionais

SQL
-- IF Decision
SELECT 
    name,
    score,
    IF(score >= 60, 'Pass', 'Fail') AS result
FROM students;

-- IFNULL Processing NULL
SELECT 
    name,
    IFNULL(phone, 'No phone') AS phone
FROM users;

-- CASE Multiple conditions
SELECT 
    name,
    score,
    CASE 
        WHEN score >= 90 THEN 'A'
        WHEN score >= 80 THEN 'B'
        WHEN score >= 70 THEN 'C'
        WHEN score >= 60 THEN 'D'
        ELSE 'F'
    END AS grade
FROM students;
▶ Experimente

Saída:

TEXT 📖 Somente leitura
+-------+-------+-------+
| name  | score | grade |
+-------+-------+-------+
| Alice |    95 | A     |
| Bob   |    82 | B     |
| Carol |    67 | D     |
| Dave  |    45 | F     |
+-------+-------+-------+

7. Visualização da função agregada

Função Descrição Exemplo
COUNT(*) contagem SELECT COUNT(*) FROM users
SUM(col) Soma SELECT SUM(amount) FROM orders
AVG(col) Média SELECT AVG(salary) FROM employees
MAX(col) Valor máximo SELECT MAX(price) FROM products
MIN(col) valor mínimo SELECT MIN(age) FROM users

Para mais detalhes, consulte a Lição 12, “Agregação e agrupamento”.


❓ Perguntas Frequentes

P: Qual é o resultado da função CONCAT quando ela contém NULL? R: O resultado é NULL. Use CONCAT_WS ou IFNULL para lidar com isso: CONCAT_WS(' ', 'Hello', NULL) → 'Olá'.

P: Qual é a diferença entre NOW() e CURDATE()? R: NOW() retorna a data e a hora, enquanto CURDATE() retorna apenas a data.

P: Onde posso encontrar os especificadores de formatação de data? R: Pesquise por “especificadores DATE_FORMAT do MySQL”. Os mais comuns incluem: %Y (ano), %m (mês), %d (dia), %H (hora), %i (minuto) e %s (segundo).

P: É possível usar funções na cláusula WHERE? R: Sim, mas isso afetará a indexação. WHERE DATE(created_at) = CURDATE() não pode usar um índice; use um intervalo em vez disso: WHERE created_at >= CURDATE() AND created_at < CURDATE() + 1.


📖 Resumo


📝 Exercícios

  1. Problema básico (Dificuldade ⭐): Use CONCAT e LPAD para gerar um número de pedido no formato 'ORD000001'.

  2. Problema avançado (Dificuldade: ⭐⭐): Consulte o número de pedidos para cada dia nos últimos 30 dias, usando DATE_FORMAT para formatar as datas.

  3. Questão de desafio (Dificuldade: ⭐⭐⭐): Calcule a idade de cada usuário e use uma instrução CASE WHEN para classificá-los em quatro categorias: “adolescente”, “jovem adulto”, “meia-idade” e “idoso”.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%