Я не вижу такую функцию, как LPAD
в SQL Server 2008. Например, как я могу преобразовать следующие запросы в T-SQL? Спасибо за ваши ответы
select LPAD(MY_VALUE,2,' ')) VALUE
FROM MY_TABLE
Я не вижу такую функцию, как LPAD
в SQL Server 2008. Например, как я могу преобразовать следующие запросы в T-SQL? Спасибо за ваши ответы
select LPAD(MY_VALUE,2,' ')) VALUE
FROM MY_TABLE
В основном используйте его с количеством символов, которое вы собираетесь выбрать, а затем правой строкой.
Select right(replicate(' ',2) + YourFieldValue,2) from YourTable
Вы можете использовать функцию пробела вместо репликации, пробел (number_of_spaces), реплицировать только позволяет вам накладывать альтернативные символы.
Ручные вычисления могут быть раздражающими для применения внутри запросов. К счастью, мы можем создать функцию:
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.
Мне нужно что-то подобное, но я не мог использовать "+", потому что тогда он был интерпретирован как дополнение между цифрами "0000000000" и [seq_no]. Поэтому я использовал concat, и он работал нормально.
select right (concat(replicate('0', 10), next value for seq_no), 10);
Я придумал функцию 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