如何使用T-SQL在SQL Server 2005中将数字转换为固定长度的格式化字符串?
e.g。
Inputs: 5,01,007,0009,00011,01200
Result: 000005,000007,000009,0000011,001200
答案 0 :(得分:5)
看起来你想要6宽。尝试将填充字符(在本例中为零)放在int / string的左侧,然后将6个字符放在字符串的右侧。
这个怎么样?
DECLARE @i int;
SELECT @i = 1200;
SELECT RIGHT('000000'+ CAST(@i as varchar(10)), 6);
答案 1 :(得分:4)
我发现这样做的最好方法是使用STR
语句:
SELECT REPLACE(STR(123, 6), ' ', '0')
以上陈述将导致000123
。它基本上将123转换为6个字符的字符串(用空格填充),然后使用REPLACE
将空格替换为零。
答案 2 :(得分:0)
尝试
WITH t(c) AS
(
SELECT 1.99 UNION ALL
SELECT 21.34 UNION ALL
SELECT 1797.94 UNION ALL
SELECT 300.36 UNION ALL
SELECT 21.99 UNION ALL
SELECT -2.31
)
select
c,
replicate(0,4-len(replace(substring(cast(c as varchar(10)),1,charindex('.',c)-1),'-','')))+''+
replace(replace(substring(cast(c as varchar(10)),1,charindex('.',c)-1),'-',''),'','-') +''+
replace(substring(cast(c as varchar(10)),charindex('.',c),len(c)),'-','')
from t
我仍然会对其进行优化
答案 3 :(得分:0)
动态领先零分配的最佳方式
WITH t(c)AS(选择1.99 UNION ALL SELECT 21.34 UNION ALL SELECT 1797.94 UNION ALL SELECT 300.36 UNION ALL SELECT 21.99 UNION ALL 选择2.31),
最终(a,b,c,d)为(选择c, substring(cast(c as。) varchar(10)),1,charindex('。',c)-1), (选择max(len(substring(cast(c as。) VARCHAR(10)),1,CHARINDEX( '',C)-1))) 来自t),substring(cast(c as。) VARCHAR(10)),CHARINDEX( '',C)+ 1,LEN(c))的 从t组到c)
选择一个, 右(复制( '0',C)+ '' + B,4)+ '' + d 来自最后
答案 4 :(得分:0)
declare @i int
set @i=10
print replace(str(@i),' ','0')