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
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
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.
esto obtiene los caracteres de la derecha. Por ejemplo, quiero obtener 18 de 18.00.Esto devuelve 00 – jhash
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
tienes razón.Gracias – jhash
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);
También puedes 'CAST (tu_número AS VARCHAR (10))' y trabajar con cadenas –
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 .
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
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