Подтвердить что ты не робот

LPAD в SQL Server 2008

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

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

Ответ 1

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

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

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

Ответ 2

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

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.

Ответ 3

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

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

Ответ 4

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

Они должны работать так же, как версии 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