Em SQL,
RPAD()
é usado para preencher a parte direita de uma string com um caractere especificado. A função pode ser usada em strings e números, embora dependendo do DBMS, os números podem ter que ser passados como uma string antes de serem preenchidos. DBMSs que possuem um
RPAD()
incluem MySQL, MariaDB, PostgreSQL e Oracle. SGBDs que não tem um
RPAD()
função incluem SQL Server e SQLite. Exemplo
Aqui está um exemplo para demonstrar o
RPAD()
função:SELECT RPAD('Look Right', 40);
Resultado:
+------------------------------------------+ | RPAD('Look Right', 40) | +------------------------------------------+ | Look Right | +------------------------------------------+
Aqui, a parte direita da string é preenchida com um espaço (o caractere de preenchimento padrão) e a string resultante tem 40 caracteres (porque eu especifiquei
40
como segundo argumento). Oracle funciona da mesma forma, mas precisamos usar
FROM DUAL
ao fazer uma consulta como esta (sem consultar uma tabela real):SELECT RPAD('Look Right', 40)
FROM DUAL;
Resultado:
RPAD('LOOKRIGHT',40) ___________________________________________ Look Right
Nos exemplos acima, usei muito preenchimento para tornar o preenchimento aparente.
Aqui está outro exemplo que pode demonstrar o preenchimento correto de forma mais clara:
SELECT CONCAT(RPAD('abc', 4), 'def');
Resultado:
abc def
Neste caso, concatenei
abc
com def
mas abc
tinha preenchimento direito aplicado com o RPAD()
função. Especifique um caractere de preenchimento
O preenchimento não precisa necessariamente ser um espaço. Opcionalmente, podemos adicionar um terceiro argumento para especificar o caractere (ou caracteres) a ser usado no preenchimento.
SELECT RPAD('Rat', 4, 't');
Resultado:
Ratt
Também pode ser usado para padronizar números com zeros (ou outro dígito):
SELECT RPAD('7', 3, '0');
Resultado:
700
Isso obviamente altera o número e, neste caso, o mesmo poderia ter sido alcançado simplesmente multiplicando o número por 100. No entanto, multiplicar um número não aplica preenchimento a ele.
O exemplo a seguir demonstra o que quero dizer:
SELECT RPAD('77', 3, '0');
Resultado:
770
Multiplicar 77 por 100 teria o resultado errado.
Nos exemplos acima eu passei o número como uma string.
Em alguns SGBDs (como MariaDB e MySQL) podemos passar o número como um número, assim como o número para preenchê-lo:
SELECT RPAD(7, 3, 0);
Resultado:
700
Também podemos fazer isso no Oracle:
SELECT RPAD(7, 3, 0)
FROM DUAL;
Resultado:
700
Mas o PostgreSQL tem um problema com isso:
SELECT RPAD(7, 3, 0);
Resultado:
ERROR: function rpad(integer, integer, integer) does not exist
SQL Server
SQL Server não tem um
RPAD()
função, mas isso não nos impede de adicionar preenchimento a números e strings. Números
Se o número tiver uma parte fracionária, o
FORMAT()
função será suficiente:SELECT
FORMAT(0.7, '.000') AS "1",
FORMAT(0.7, '0.00') AS "2",
FORMAT(7.0, '0.00') AS "3";
Resultado:
+------+------+------+ | 1 | 2 | 3 | |------+------+------| | .700 | 0.70 | 7.00 | +------+------+------+
A forma como funciona é que passamos o número, seguido por uma string de formato. No exemplo acima, a string de formato consiste em especificadores de formato numérico personalizados que resultam no número original com dígitos adicionados à sua parte fracionária. Se ainda não houver tantos dígitos no número original, ele será preenchido com zeros.
Mas se o número não tiver uma parte fracionária, podemos usar o
REPLACE()
função para remover o separador decimal que é aplicado com o FORMAT()
função:SELECT
REPLACE(FORMAT(7, '.00', 'en-US'), '.', '') AS "1",
REPLACE(FORMAT(17, '.00', 'en-US'), '.', '') AS "2",
REPLACE(FORMAT(73.5, '.00', 'en-US'), '.', '') AS "3";
Resultado:
+-----+------+------+ | 1 | 2 | 3 | |-----+------+------| | 700 | 1700 | 7350 | +-----+------+------+
Este método também pode ser usado para adicionar zeros à esquerda, se necessário. Basta adicioná-los à esquerda do ponto decimal na string de formato.
Aqui, eu usei explicitamente
en-US
como o terceiro argumento (opcional) para garantir que o separador decimal seja um ponto/ponto final, que é a convenção usada pelo en-US
localidade. Texto
Aqui está uma técnica que pode ser usada em dados textuais:
SELECT
LEFT('Dog' + '.........', 9) AS "1",
LEFT('Horse' + '.........', 9) AS "2",
LEFT('Crocodile' + '.........', 9) AS "3";
Resultado:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | Dog...... | Horse.... | Crocodile | +-----------+-----------+-----------+
Embora você precise ter cuidado para não cortar acidentalmente parte da string ou adicionar espaços indesejados.