2011-05-06 70 views
21

No puedo ver una función como LPAD en SQL Server 2008. Por ejemplo, ¿cómo puedo convertir las siguientes consultas en T-SQL? Gracias por sus respuestasLPAD en SQL Server 2008

select LPAD(MY_VALUE,2,' ')) VALUE 
FROM MY_TABLE 
+0

en cuenta que si usted está tratando de replicar la función DEPA de Oracle, ninguna de las respuestas a continuación son correctos para el caso donde la longitud de salida es menor que la longitud de entrada. – Doug

Respuesta

26

Básicamente almohadilla con el número de caracteres que tienen la intención de seleccionar y luego a la derecha de la cadena.

Select right(replicate(' ',2) + YourFieldValue,2) from YourTable 

Usted puede utilizar la función de espacio en lugar de replicación, el espacio (number_of_spaces), replicar sólo le permite a la almohadilla con los caracteres alternativos.

+0

esto obtiene los caracteres de la derecha. Por ejemplo, quiero obtener 18 de 18.00.Esto devuelve 00 – jhash

+1

Su pregunta acerca de LPAD, seleccione LPAD ('ab', 5, 'x') desde dual da xxxab, p. almohadilla la izquierda a la cantidad requerida, imita eso en SQL Server. Técnicamente, su PLSQL no es válido debido a la compatibilidad, por lo que podría perder algo. – Andrew

+0

tienes razón.Gracias – jhash

2

Necesitaba algo similar, pero no pude usar '+' porque entonces se interpretó como una adición entre los números '0000000000' y [seq_no]. Así que usé el concat en su lugar y funcionó bien.

select right (concat(replicate('0', 10), next value for seq_no), 10); 
+0

También puedes 'CAST (tu_número AS VARCHAR (10))' y trabajar con cadenas –

3

Los cálculos manuales pueden ser molestos para aplicar dentro de las consultas. Por suerte, podemos crear una función: (. Por favor, vuelva a colocar VARCHAR con NVARCHAR a su gusto, o utiliza un algoritmo alternativo)

CREATE FUNCTION LPAD 
(
    @string VARCHAR(MAX), -- Initial string 
    @length INT,   -- Size of final string 
    @pad CHAR    -- Pad character 
) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    RETURN REPLICATE(@pad, @length - LEN(@string)) + @string; 
END 
GO 

continuación:

SELECT dbo.LPAD(MY_VALUE, 2, ' ') VALUE 
FROM MY_TABLE 

deben trabajar since SQL Server 2005 .

0

He creado una función LPAD y RPAD donde puede usar una cadena de caracteres para la parte de la almohadilla.

Deberían funcionar igual que las versiones de DB2.

Aquí está el DEPA:

CREATE FUNCTION dbo.LPAD 
(
    @string NVARCHAR(MAX), -- Initial string 
    @length INT,   -- Size of final string 
    @pad NVARCHAR(MAX)  -- Pad string 
) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    RETURN SUBSTRING(REPLICATE(@pad, @length),1,@length - LEN(@string)) + @string; 
END 
GO 

Y aquí es el RPAD:

CREATE FUNCTION dbo.RPAD 
(
    @string NVARCHAR(MAX), -- Initial string 
    @length INT,   -- Size of final string 
    @pad NVARCHAR(MAX)  -- Pad string 
) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    RETURN @string + SUBSTRING(REPLICATE(@pad, @length),1,@length - LEN(@string)); 
END 
GO 
Cuestiones relacionadas