Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FabianoSouza

Zeros à esquerda com REPLICATE

Recommended Posts

Encontrei este código que funciona: adiciona zeros à esquerda para o resultado ficar com a apresentação padronizada.

SELECT 
replicate(0, 10- len(Codigo))+(replace(Codigo,'','')) 
AS 'ID' FROM Tabela

Mas não preciso usar o replace no meu campo (não há anda para ser substituído)

 

Entretanto, se retirar o replace a coisa deixa de criar os zeros à esquerda.

Como corrijo isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia. Espero poder ajuda-lo compartilhando as funções abaixo:

create function [dbo].[lpad]
(	@texto       varchar(4000),
    @Caracter    varchar(255),
    @size int
)
returns varchar(4000)
as
begin
Declare @Retorno varchar(4000)


    select @Retorno = right(replicate(@caracter, @size) + @texto,@size)


return @Retorno

end

Exemplo de uso e retorno da função lpad:

select dbo.lpad('1', '0', 2) as retorno
retorno
-------
01


select dbo.lpad('1', '0', 10) as retorno
retorno
----------
0000000001


select dbo.lpad('25', '0', 4) as retorno
retorno
-------
0025


select dbo.lpad('25', 'x', 4) as retorno
retorno
-------
xx25

Fiz também uma outra para preencher à direita:

create function [dbo].[rpad]
(	@texto       varchar(4000),
    @Caracter    varchar(4000),
    @Size int
)
returns varchar(4000)
as
begin
Declare @Retorno varchar(4000)


    select @Retorno = Left(@texto + replicate(@caracter, @Size),@Size)


return @Retorno

end

Exemplo de uso e retorno da função rpad:

select dbo.rpad('Total', '-', 50) as retorno
retorno
--------------------------------------------------
Total---------------------------------------------

Fico à disposição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, ficou ótima.

Mas queria saber se é possível fazer um ajuste.

 

Gostaria que o valor que determina a quantidade de zeros ficasse na function, não no select.

É possível?

Gostaria que fosse dessa forma porque tenho inúmeras consultas no sistema.

Ficaria mais produtivo no caso de manutenção: se atualizar a function, atualizaria os zeros (ou qualquer outro caractere para o sistema todo, sem precisar mudar as consultas uma a uma).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi você gostaria de deixar o tamanho do retorno fixo, e não informar na chamada da função.

alter function [dbo].[lpad]
(
    @texto       varchar(4000)
)
returns varchar(4000)
as
begin
Declare @Retorno varchar(4000),
    @Caracter varchar(255) = '0', --Caracter utilizado para preencher o restante da string
    @size		 int = 4 --Define o tamanho da string de retorno


    select @Retorno = right(replicate(@caracter, @size) + @texto,@size)


return @Retorno

end

Fico à disposição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo. Alterei a function.

 

Mas agora como eu a uso no select?

 

Para o exemplo inicial eu usa essa estrutura

select dbo.lpad('1', '0', 2) as retorno

Agora como faço para chamar a function com retorno fixo do tópico #5?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.