相比之下,说:

REPLICATE(@padchar, @len - LEN(@str)) + @str

当前回答

这是一个简单的左填充方法:

REPLACE(STR(FACT_HEAD.FACT_NO, x, 0), ' ', y)

其中x是填充号y是填充字符。

示例:

REPLACE(STR(FACT_HEAD.FACT_NO, 3, 0), ' ', 0)

其他回答

有几个人给出了不同的版本:

right('XXXXXXXXXXXX'+ @str, @n)

要小心,因为如果它比n长,它会截断实际数据。

可能有点夸张,我经常使用这个UDF:

CREATE FUNCTION [dbo].[f_pad_before](@string VARCHAR(255), @desired_length INTEGER, @pad_character CHAR(1))
RETURNS VARCHAR(255) AS  
BEGIN

-- Prefix the required number of spaces to bulk up the string and then replace the spaces with the desired character
 RETURN ltrim(rtrim(
        CASE
          WHEN LEN(@string) < @desired_length
            THEN REPLACE(SPACE(@desired_length - LEN(@string)), ' ', @pad_character) + @string
          ELSE @string
        END
        ))
END

这样你就可以做这样的事情:

select dbo.f_pad_before('aaa', 10, '_')

要提供四舍五入到小数点后两位,但如果需要,右补零,我有:

DECLARE @value = 20.1
SET @value = ROUND(@value,2) * 100
PRINT LEFT(CAST(@value AS VARCHAR(20)), LEN(@value)-2) + '.' + RIGHT(CAST(@value AS VARCHAR(20)),2)

如果有人能想出一种更简洁的方法,那将是非常感激的——上面的方法似乎很笨拙。

注意:在本例中,我使用SQL Server以HTML格式发送电子邮件报告,因此希望格式化信息,而不涉及额外的工具来解析数据。

在SQL Server 2005及以后的版本中,您可以创建一个CLR函数来完成此操作。

这是一个简单的左填充方法:

REPLACE(STR(FACT_HEAD.FACT_NO, x, 0), ' ', y)

其中x是填充号y是填充字符。

示例:

REPLACE(STR(FACT_HEAD.FACT_NO, 3, 0), ' ', 0)