我有一个最多3个字符长的字符串,当它第一次创建在SQL Server 2008 R2。
我想用前导零填充它,所以如果它的原始值是“1”,那么新值将是“001”。或者如果它的原始值是“23”,那么新的值是“023”。或者如果它的原始值为124,则新值与原始值相同。
我使用的是SQL Server 2008 R2。如何使用T-SQL做到这一点?
我有一个最多3个字符长的字符串,当它第一次创建在SQL Server 2008 R2。
我想用前导零填充它,所以如果它的原始值是“1”,那么新值将是“001”。或者如果它的原始值是“23”,那么新的值是“023”。或者如果它的原始值为124,则新值与原始值相同。
我使用的是SQL Server 2008 R2。如何使用T-SQL做到这一点?
当前回答
很简单
如:
DECLARE @DUENO BIGINT
SET @DUENO=5
SELECT 'ND'+STUFF('000000',6-LEN(RTRIM(@DueNo))+1,LEN(RTRIM(@DueNo)),RTRIM(@DueNo)) DUENO
其他回答
使用这个函数,它适合各种情况。
CREATE FUNCTION dbo.fnNumPadLeft (@input INT, @pad tinyint)
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @NumStr VARCHAR(250)
SET @NumStr = LTRIM(@input)
IF(@pad > LEN(@NumStr))
SET @NumStr = REPLICATE('0', @Pad - LEN(@NumStr)) + @NumStr;
RETURN @NumStr;
END
样例输出
SELECT [dbo].[fnNumPadLeft] (2016,10) -- returns 0000002016
SELECT [dbo].[fnNumPadLeft] (2016,5) -- returns 02016
SELECT [dbo].[fnNumPadLeft] (2016,2) -- returns 2016
SELECT [dbo].[fnNumPadLeft] (2016,0) -- returns 2016
很简单
如:
DECLARE @DUENO BIGINT
SET @DUENO=5
SELECT 'ND'+STUFF('000000',6-LEN(RTRIM(@DueNo))+1,LEN(RTRIM(@DueNo)),RTRIM(@DueNo)) DUENO
我创建了这个函数,它满足bigint和一个前导零或其他单个字符(最多返回20个字符),并允许结果长度小于输入数字的长度:
create FUNCTION fnPadNum (
@Num BIGINT --Number to be padded, @sLen BIGINT --Total length of results , @PadChar varchar(1))
RETURNS VARCHAR(20)
AS
--Pads bigint with leading 0's
--Sample: "select dbo.fnPadNum(201,5,'0')" returns "00201"
--Sample: "select dbo.fnPadNum(201,5,'*')" returns "**201"
--Sample: "select dbo.fnPadNum(201,5,' ')" returns " 201"
BEGIN
DECLARE @Results VARCHAR(20)
SELECT @Results = CASE
WHEN @sLen >= len(ISNULL(@Num, 0))
THEN replicate(@PadChar, @sLen - len(@Num)) + CAST(ISNULL(@Num, 0) AS VARCHAR)
ELSE CAST(ISNULL(@Num, 0) AS VARCHAR)
END
RETURN @Results
END
GO
--Usage:
SELECT dbo.fnPadNum(201, 5,'0')
SELECT dbo.fnPadNum(201, 5,'*')
SELECT dbo.fnPadNum(201, 5,' ')
如果字段已经是一个字符串,这将起作用
SELECT RIGHT('000'+ISNULL(field,''),3)
如果你想让null值显示为000
它可能是一个整数,然后你会想
SELECT RIGHT('000'+CAST(field AS VARCHAR(3)),3)
根据问题的要求,这个答案只在长度<= 3时有效,如果你想要更大的东西,你需要改变字符串常数和两个整数常数为所需的宽度。例如“0000”和VARCHAR(4)),4
安全方法:
SELECT REPLACE(STR(n,3),' ','0')
这样做的好处是,对于n < 0或n > 999返回字符串'***',这是一个很好的、很明显的越界输入指示器。这里列出的其他方法将通过将输入截断为3个字符的子字符串而无声地失败。