添加前导零并将varchar转换为float

时间:2013-09-05 15:59:48

标签: sql sql-server

我有数据需要在其中添加前导零。但问题是数据类型是浮点数。所以每当我添加零时,它会自动省略它们。我试图将前导零添加到它然后尝试将其转换为varchar(50)。

我使用了以下查询(感谢Damien_The_Unbeliever先生):

select  '0' + convert (varchar(50), (wallet_sys)) as wallet_sys  from NewSysData1

然而结果显示:01.72295e + 009而不是像这样显示:01718738312

我该怎么办?

PS:部分样本数据如下:

1718738312, 8733983312, 9383879312

我希望这些是:

01718738312, 08733983312, 09383879312

4 个答案:

答案 0 :(得分:2)

您可以使用str() function和修剪

select '0' + ltrim(rtrim(str(wallet_sys))) as wallet_sys from NewSysData1;

SqlFiddle

答案 1 :(得分:1)

我使用以下方法完成了此操作:

select right('00' + convert(varchar, MONTH(getdate())),2)

答案 2 :(得分:0)

select right(replicate('0',10)+cast(wallet_sys as varchar),11)

答案 3 :(得分:0)

来自手册:http://technet.microsoft.com/en-us/library/ms187928.aspx

  

CONVERT的语法:

     
    

CONVERT(data_type [(length)],表达式 [,style]

  

-

  

浮动和真实样式

     
    

当表达式为 float real 时,样式可以是下表中显示的值之一。其他值处理为0.

  

-

Value          | Output
---------------+---------------------
0 (default)    | A maximum of 6 digits. Use in scientific notation, when appropriate.
1              | Always 8 digits. Always use in scientific notation.
2              | Always 16 digits. Always use in scientific notation.
126, 128, 129  | Included for legacy reasons and might be deprecated in a future release.

请注意,没有任何格式化选项允许任何更长的值不是科学记数法。

因此,我们要做的是转换为另一种类型作为临时:

SELECT '0' + Convert(varchar(50), Convert(decimal(38, 10), Convert(float, '1.72295e+009'), 0))

通过更改decimal类型

的比例来调整小数位数