我有一个最多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做到这一点?
当前回答
最后我决定用这个:
RIGHT(STUFF(ReceiptNum, 1, 0, replicate('0',10)),10)
其他回答
很简单
如:
DECLARE @DUENO BIGINT
SET @DUENO=5
SELECT 'ND'+STUFF('000000',6-LEN(RTRIM(@DueNo))+1,LEN(RTRIM(@DueNo)),RTRIM(@DueNo)) DUENO
当我需要固定大小的varchar(或字符串)输出时,我用整数列作为输入有类似的问题。例如,1到'01',12到'12'。这段代码工作:
SELECT RIGHT(CONCAT('00',field::text),2)
如果输入也是varchar的列,则可以避免强制转换部分。
安全方法:
SELECT REPLACE(STR(n,3),' ','0')
这样做的好处是,对于n < 0或n > 999返回字符串'***',这是一个很好的、很明显的越界输入指示器。这里列出的其他方法将通过将输入截断为3个字符的子字符串而无声地失败。
如果字段已经是一个字符串,这将起作用
SELECT RIGHT('000'+ISNULL(field,''),3)
如果你想让null值显示为000
它可能是一个整数,然后你会想
SELECT RIGHT('000'+CAST(field AS VARCHAR(3)),3)
根据问题的要求,这个答案只在长度<= 3时有效,如果你想要更大的东西,你需要改变字符串常数和两个整数常数为所需的宽度。例如“0000”和VARCHAR(4)),4
下面是我在SQL Server Express 2012中使用的Hogan回答的一个变体:
SELECT RIGHT(CONCAT('000', field), 3)
而不是担心字段是否是字符串,我只是CONCAT它,因为它无论如何都会输出一个字符串。此外,如果字段可以为NULL,则可能需要使用ISNULL来避免函数得到NULL结果。
SELECT RIGHT(CONCAT('000', ISNULL(field,'')), 3)