Função MySQL LPAD()

Resumo : neste tutorial, você aprenderá como usar a LPAD()função MySQL para preencher à esquerda uma string com um conjunto específico de caracteres em um comprimento especificado.

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

A LPAD()função permite preencher à esquerda uma string com um conjunto específico de caracteres até um comprimento especificado.

Aqui está a sintaxe da LPAD()função:

LPAD(string, length, pad_string)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • string: a string de entrada que você deseja preencher à esquerda.
  • length: O comprimento total da string resultante após o preenchimento.
  • pad_string: a string que você usa para preenchimento.

Se algum argumento for NULL, o LPAD()retornará NULL.

Na prática, você usa a LPAD()função de formatação de strings com comprimento consistente, alinha texto em colunas ou prepara dados para exibição.

Exemplo de função MySQL LPAD()

Vejamos alguns exemplos de uso da LPAD()função.

1) Usando a função LPAD() para preencher à esquerda uma string numérica com zeros

O exemplo a seguir usa a LPAD()função para preencher à esquerda uma sequência numérica com zero. A string de resultado tem sempre 5 caracteres:

SELECT 
  LPAD('123', 5, '0');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+---------------------+
| LPAD('123', 5, '0') |
+---------------------+
| 00123               |
+---------------------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O exemplo a seguir mostra como preencher sequências numéricas à esquerda com zeros:

SELECT 
   LPAD('123', 5, '0'),
   LPAD('1234', 5, '0'),
   LPAD('12345', 5, '0');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+---------------------+----------------------+-----------------------+
| LPAD('123', 5, '0') | LPAD('1234', 5, '0') | LPAD('12345', 5, '0') |
+---------------------+----------------------+-----------------------+
| 00123               | 01234                | 12345                 |
+---------------------+----------------------+-----------------------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

2) Usando a função LPAD() para preencher à esquerda uma string com espaços

O exemplo a seguir usa a LPAD()função para preencher à esquerda uma string com dois espaços:

SELECT LPAD('MySQL',7, ' ');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----------------------+
| LPAD('MySQL',7, ' ') |
+----------------------+
|   MySQL              |
+----------------------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

3) Usando a função LPAD() com dados da tabela

Usaremos a employeestabela do banco de dados de exemplo para a demonstração:

A consulta a seguir usa a LPAD()função para gerar uma estrutura em árvore de funcionários e seus gerentes dentro de uma organização.

WITH RECURSIVE employee_paths AS
  ( SELECT employeeNumber,
           reportsTo managerNumber,
		   firstName,
           1 lvl
   FROM employees e
   WHERE reportsTo IS NULL
     UNION ALL
     SELECT e.employeeNumber,
            e.reportsTo,
			e.firstName,
            lvl+1
     FROM employees e
     INNER JOIN employee_paths ep ON ep.employeeNumber = e.reportsTo )
SELECT employeeNumber,
       managerNumber,
       lvl,
	   CONCAT_WS(' ',LPAD('',lvl, '-'), firstName) firstName
FROM employee_paths ep
ORDER BY lvl, firstName;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----------------+---------------+------+---------------+
| employeeNumber | managerNumber | lvl  | firstName     |
+----------------+---------------+------+---------------+
|           1002 |          NULL |    1 | - Diane       |
|           1076 |          1002 |    2 | -- Jeff       |
|           1056 |          1002 |    2 | -- Mary       |
|           1143 |          1056 |    3 | --- Anthony   |
|           1102 |          1056 |    3 | --- Gerard    |
|           1621 |          1056 |    3 | --- Mami      |
|           1088 |          1056 |    3 | --- William   |
|           1611 |          1088 |    4 | ---- Andy     |
|           1504 |          1102 |    4 | ---- Barry    |
|           1286 |          1143 |    4 | ---- Foon Yue |
|           1323 |          1143 |    4 | ---- George   |
|           1370 |          1102 |    4 | ---- Gerard   |
|           1188 |          1143 |    4 | ---- Julie    |
|           1501 |          1102 |    4 | ---- Larry    |
|           1165 |          1143 |    4 | ---- Leslie   |
|           1166 |          1143 |    4 | ---- Leslie   |
|           1337 |          1102 |    4 | ---- Loui     |
|           1702 |          1102 |    4 | ---- Martin   |
|           1401 |          1102 |    4 | ---- Pamela   |
|           1612 |          1088 |    4 | ---- Peter    |
|           1216 |          1143 |    4 | ---- Steve    |
|           1619 |          1088 |    4 | ---- Tom      |
|           1625 |          1621 |    4 | ---- Yoshimi  |
+----------------+---------------+------+---------------+
23 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, usamos a LPAD()função para preencher à esquerda o caractere -com base no nível do funcionário na estrutura hierárquica.

Veja como funciona.

  1. WITH RECURSIVE employee_paths AS: esta cláusula inicia a definição de uma expressão de tabela comum (CTE) chamada employee_paths. A RECURSIVEpalavra-chave indica que este CTE será usado recursivamente.
  2. ( SELECT employeeNumber, reportsTo managerNumber, firstName, 1 lvl FROM employees e WHERE reportsTo IS NULL: Esta é a parte inicial (ou base) do CTE. Seleciona funcionários cujo reportsTocampo é NULL, que representa a alta administração ou funcionários que não possuem gestores. Ele atribui um nível ( lvl) de 1 a esses funcionários de nível superior.
  3. UNION ALL: é usado para combinar os resultados das partes recursivas inicial e subsequente do CTE.
  4. SELECT e.employeeNumber, e.reportsTo, e.firstName, lvl+1 FROM employees e INNER JOIN employee_paths ep ON ep.employeeNumber = e.reportsTo: Esta é a parte recursiva do CTE. Seleciona os funcionários ( e) e seus atributos (número do funcionário, número do gerente, nome) onde o número do gerente do funcionário ( reportsTo) corresponde ao employeeNumberdos registros no CTE ( employee_paths). Também incrementa o nível ( lvl) em 1 para cada iteração.
  5. A SELECTinstrução após o CTE é usada para recuperar os resultados finais do CTE.
  6. SELECT employeeNumber, managerNumber, lvl, CONCAT_WS(' ',LPAD('',lvl, '-'), firstName) firstName FROM employee_paths ep: esta parte da consulta recupera as seguintes colunas:
    • employeeNumber: o identificador exclusivo do funcionário.
    • managerNumber: o identificador exclusivo do gerente do funcionário.
    • lvl: o nível ou profundidade do funcionário na hierarquia da organização.
    • CONCAT_WS(' ',LPAD('',lvl, '-'), firstName) firstName: Concatena os seguintes valores:
      • LPAD('',lvl, '-'): preenche à esquerda uma string vazia com hífens (com base no lvlvalor) para criar um recuo que representa a posição do funcionário na hierarquia.
      • firstName: O primeiro nome do funcionário.
  7. ORDER BY lvl, firstName: o conjunto de resultados final é ordenado primeiro pelo nível ( lvl) para manter a ordem hierárquica e depois pelo primeiro nome ( firstName) dentro de cada nível.

Para obter informações detalhadas sobre o CTE recursivo, consulte o tutorial MySQL Recursive CTE .

Resumo

  • Use a função MySQL LPAD()para preencher à esquerda uma string com um conjunto específico de caracteres até um comprimento especificado.

Deixe um comentário

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