我在我的sql表中有一列。我想知道如何在我的列的值小于10时将前导零添加到列中?因此,例如:如何在数字小于10时添加前导零?
number result
1 -> 01
2 -> 02
3 -> 03
4 -> 04
10 -> 10
我在我的sql表中有一列。我想知道如何在我的列的值小于10时将前导零添加到列中?因此,例如:如何在数字小于10时添加前导零?
number result
1 -> 01
2 -> 02
3 -> 03
4 -> 04
10 -> 10
您可以使用RIGHT
:
SELECT RIGHT('0' + CAST(Number AS VARCHAR(2)), 2) FROM tbl
对于Number
s的长度> 2,您使用CASE
表达:
SELECT
CASE
WHEN Number BETWEEN 0 AND 99
THEN RIGHT('0' + CAST(Number AS VARCHAR(2)), 2)
ELSE
CAST(Number AS VARCHAR(10))
END
FROM tbl
Felix的解决方案是伟大的,除非你在你的表格有100以上的数字,在这种情况下,尝试使用一个case语句来代替:
Select case when Number between 1 and 9
then '0' else '' end + cast(number as varchar(3))
感谢您的帮助,我也会尝试 – RedRocket
另一种方法,
select case when number <10 then replicate('0',1)+cast(number as varchar)
else cast(number as varchar) end
为什么使用REPLICATE?为什么不只是“0”? –
伟大@FelixPamittan,你是对的。如果我们必须重复只有一个0然后复制将不会使用,但incase当0将重复,然后罚款。我只是想显示不同的方法,它也会帮助其他用户。 – KumarHarsh
而且还多了一个解决方案:
SELECT REPLACE(STR(@YourNumber,2),' ','0');
我喜欢这一点,因为其他的方法可能导致数的情况下,随机成果,这是超过您指定的数字的计数宽:
但它不会是负面的数字处理...
DECLARE @YourNumber INT=123;
SELECT REPLACE(STR(@YourNumber,5),' ', '0') --pad to five digits
,REPLACE(STR(@YourNumber,3),' ', '0') --pad to 3 digits
,REPLACE(STR(@YourNumber,2),' ', '0'); --123 is wider than 2 digits...
结果
0
123
**
一般来说,你应该在表示层做这个格式,而不是在数据库层。 – RichardCL
如果值大于100或1000,结果如何? –