LPAD dans SQL Server 2008

Je ne peux pas voir une fonction comme LPAD dans SQL Server 2008. Par exemple, comment puis-je convertir les requêtes suivantes en T-SQL? Merci pour vos réponses

select  LPAD(MY_VALUE,2,' ')) VALUE
FROM MY_TABLE
23
demandé sur Jon Heller 2011-05-06 17:52:24

4 réponses

Fondamentalement pad avec le nombre de caractères que vous avez l'intention de sélectionner et ensuite à droite de la chaîne.

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

Vous pouvez utiliser la fonction space au lieu de replicate, space (number_of_spaces), replicate vous permet simplement de pad avec des caractères alternatifs.

31
répondu Andrew 2011-05-06 14:00:34

Les calculs manuels peuvent être ennuyeux à appliquer à l'intérieur des requêtes. Heureusement, nous pouvons créer une fonction:

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

(Veuillez remplacer VARCHAR par NVARCHAR à votre goût, ou utiliser un algorithme alternatif.)

Puis:

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

Devrait fonctionner depuis SQL Server 2005.

4
répondu Álvaro González 2015-09-30 18:48:03

J'avais besoin de quelque chose de similaire mais je ne pouvais pas utiliser ' + 'car alors il a été interprété comme un ajout entre les nombres '0000000000' et [seq_no]. J'ai donc utilisé concat à la place et cela a bien fonctionné.

select right (concat(replicate('0', 10),  next value for seq_no), 10);
2
répondu Jonathan Edwards 2015-09-16 04:32:32

J'ai mis au point une fonction LPAD et RPAD où vous pouvez utiliser une chaîne de caractères pour la partie pad.

Ils devraient fonctionner de la même manière que les versions DB2.

Voici le LPAD:

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

Et voici le 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
1
répondu Jeroen van der Molen 2018-01-10 11:04:58