LPAD в SQL Server 2008 - PullRequest
       7

LPAD в SQL Server 2008

24 голосов
/ 06 мая 2011

Я не вижу функции, подобной LPAD в SQL Server 2008. Например, как я могу преобразовать следующие запросы в T-SQL? Спасибо за ваши ответы

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

Ответы [ 4 ]

33 голосов
/ 06 мая 2011

В основном, это число с количеством символов, которые вы собираетесь выбрать, а затем направить строку.

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

Вы можете использовать функцию пробела вместо replicate, space (number_of_spaces), replicate просто позволяет вамдополнить альтернативными символами.

4 голосов
/ 24 июня 2015

Ручные расчеты могут раздражать при применении внутри запросов.К счастью, мы можем создать функцию:

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

(пожалуйста, замените VARCHAR на NVARCHAR по своему вкусу или используйте альтернативный алгоритм.)

Тогда:

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

Должно работать начиная с SQL Server 2005 .

2 голосов
/ 03 февраля 2015

Мне нужно было что-то подобное, но я не мог использовать «+», потому что тогда это интерпретировалось как сложение между числами «0000000000» и [seq_no]. Поэтому я использовал concat, и он работал нормально.

select right (concat(replicate('0', 10),  next value for seq_no), 10);
1 голос
/ 10 января 2018

Я придумал функцию LPAD и RPAD, где вы можете использовать строку символов для части пэда.

Они должны работать так же, как версии DB2.

Вот 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

А вот и 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...