如何转换字符串格式

时间:2011-05-15 17:15:35

标签: sql sql-server-2005 tsql

如何使用T-SQL在SQL Server 2005中将数字转换为固定长度的格式化字符串?

e.g。

Inputs: 5,01,007,0009,00011,01200
Result: 000005,000007,000009,0000011,001200

5 个答案:

答案 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')