LPAD en SQL Server, rellenando por la izquierda

3 06 2008

Me habia surgido la duda de como implementar la funcion LPAD de oracle, esa función que permite agregar caracteres comodines sobre un campo consultado.

Bueno lo que realmente hice no implica propiamente una implementación de esa función, sino mas bien como salir del paso y obtener el valor deseado. Tenía un campo númerico al que necesitaba devolverlo como una cadena de caracteres, el campo podia contener hasta dos dígitos, por tanto, si era de un solo digito anteponer el número 0, de tal modo que quede así:

01
02
03

09
10
11

99

La solución que encontré, buscando en la ayuda de SQLServer, SQL Server Books Online, fue usar RIGHT como sigue:

SELECT right( '00' + cast( 8 AS varchar(2)), 2 )

Que lo que hace es:

  1. Convertir el número a una cadena de caracteres y luego,
  2. Concatenarle la cadena de ‘00‘ para después,
  3. Obtener sólo la cantidad de caracteres que necesitamos, en nuestro caso 2.

Y eso es todo…

Dudas y Comentarios, un poco mas abajo.


Acciones

Information

24 responses

22 12 2008
Jesus

Excelente muchas gracias.

3 08 2009
excelente

resulta perfect

8 09 2010
edwars

no pasa nada, no funca para todo !!!!!….

22 09 2010
Alexis

Justo estaba buscando esto!
Thxs!

8 11 2010
ARTUROPOCASANGRE

exelente.. esto ha resuelto mi problema!!
a que numero de cuenta puedo depositar los dolares que me he ganado con esta solucion__?? jeje

11 11 2010
MCL

Excelente, funciona perfecto

5 01 2011
Natalia

Hola
Una duda, en que parte defino el nombre del campo

Gracias

5 01 2011
Natalia

Ya lo descubri.

Muchas gracias, justo lo que necesitaba

17 02 2011
jesus

excelente, siempre es bueno encontrar este tipo de informacion gracias a gente como ustedes. saludos

20 06 2011
WILDER

GRACIAS JUSTO LO QUE NECESITABA!

15 09 2011
Alejandro Basurto

It works perfect with a fix and explanation:

For instance, I wanted to get a field and pad it with 5 zeros.

SELECT right( ‘00000’ + cast( fieldToPad AS varchar(5)), 5 )

There you go…

7 12 2011
Davis

Exelente Perfecto adjunto como me quedo este fumada jeje..

Select cl.nombre_corto,o.responsable,*,CAST( cast(year(fecha_docto) as Varchar(4)) + ” + right( ’00’ + cast( cast(m.mes as Varchar(2)) AS varchar(2)), 2 ) as int) as Fecha, mes_nombre + ‘ ‘ + cast(year(fecha_docto) as varchar(4)) as aqui

Gracias.. :-)

23 02 2012
Alby Cervantes

Gracias,

6 03 2012
rodolfo

Hola, y en este caso como se haria?
Tengo un campo que maneja numeros del 1 al 1000 por desirlo asi
y al hacer la consulta quiero agregar a los primeros nueve nadamas un cero a la izquierda sin que afecte alos demas..

01
02
03..
99
100
101…
1000
1001

23 03 2012
Blogger

Se me ocurre, hacer uso del CASE, y dentro de la condicion WHEN determinar con LEN la longitud del campo, en caso de tener un digito, hacer el LPAD (lo que menciono en el post) de otro modo, solo pasar el campo directo.

1Saludo

14 05 2012
jalberto

Muchas gracias, lo necesitaba.

28 11 2012
evalle (@_evalle)

Yo cree una funcion hace tiempo mas dinamica

CREATE FUNCTION dbo.MyLPAD
(
@number VARCHAR(50) ,
@format varchar(50)
)
RETURNS varchar(50)
AS
BEGIN

DECLARE @len int
SET @len = len(@format)
RETURN RIGHT( @format + @number, @len)
END

Se usa de la siguiente manera

SELECT dbo.Format(3,’000′)

Salida: 003

SELECT dbo.Format(3,’00’)

Salida: 03

Saludos

25 04 2013
omen_dj

EXCELENTE GRACIAS

9 09 2013
José Ramírez

Excelente solución.

Gracias por compartir esto en red, amigo.

Sin más;

Cordial saludo.

6 11 2013
HnzVicious

Les dejo una versión mas genérica

ALTER FUNCTION [dbo].[LPAD](@num int, @dig int)
RETURNS varchar(20)
AS
BEGIN
IF @dig > 20 SET @dig = 20 –evita superar el tamaño de la cadena de retorno
RETURN RIGHT(REPLICATE(‘0’,@dig) + CAST(@num as varchar(20)), @dig)
END

3 06 2014
gacsale

Funcionó muy bien con una variable… gracias
Declare @fecharegistro as datetime
set @fecharegistro = getdate()

Select right (’00’ + cast (month (@fecharegistro)-1 as varchar (2)),2) as mes

24 04 2015
Oscar José Aldea Lisboa

y si se quiere rellenar pero a la derecha, mas no a la izquierda, como se haria?, muchas gracias

9 06 2015
Blogger

usa tu imaginación, si existe una instrucción que sea right, debe haber otra que sea …

30 06 2015
ranita

:P

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: