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
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.
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.
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);
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