我有一个最多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做到这一点?
当前回答
对于整数,你可以使用从int到varchar的隐式转换:
SELECT RIGHT(1000 + field, 3)
其他回答
很简单
如:
DECLARE @DUENO BIGINT
SET @DUENO=5
SELECT 'ND'+STUFF('000000',6-LEN(RTRIM(@DueNo))+1,LEN(RTRIM(@DueNo)),RTRIM(@DueNo)) DUENO
如果字段已经是一个字符串,这将起作用
SELECT RIGHT('000'+ISNULL(field,''),3)
如果你想让null值显示为000
它可能是一个整数,然后你会想
SELECT RIGHT('000'+CAST(field AS VARCHAR(3)),3)
根据问题的要求,这个答案只在长度<= 3时有效,如果你想要更大的东西,你需要改变字符串常数和两个整数常数为所需的宽度。例如“0000”和VARCHAR(4)),4
对于整数,你可以使用从int到varchar的隐式转换:
SELECT RIGHT(1000 + field, 3)
我知道这是一张旧票,但我想分享这个:
我发现这个代码提供了一个解决方案。不确定它是否适用于所有版本的MSSQL;我有MSSQL 2016。
declare @value as nvarchar(50) = 23
select REPLACE(STR(CAST(@value AS INT) + 1,4), SPACE(1), '0') as Leadingzero
这将返回“0023”。
STR函数中的4是总长度,包括值。例如,4、23和123在STR中都有4,并且将添加正确数量的零。你可以增加或减少它。不需要知道23号的长度。
编辑:我看到这和@Anon的帖子是一样的。
我来这里是为了解决如何将我的timezoneoffset转换为一个时区字符串,以便在SQL Server 2008中将日期转换为DATETIMEOFFSET。很恶心,但很有必要。
所以我需要一个方法来处理负数和正数,如果需要,将它们格式化为两个字符,前导为零。Anons的回答让我接近了,但负时区值会显示为0-5而不是所需的-05
所以在他的答案上做了一点调整,这适用于所有时区小时转换
DECLARE @n INT = 13 -- Works with -13, -5, 0, 5, etc
SELECT CASE
WHEN @n < 0 THEN '-' + REPLACE(STR(@n * -1 ,2),' ','0')
ELSE '+' + REPLACE(STR(@n,2),' ','0') END + ':00'