我有一个浮点列,其中包含不同长度的数字,我正在尝试将它们转换为varchar.
有些值超过bigint max size,所以我做不到这样的事情
cast(cast(float_field as bigint) as varchar(100))
Run Code Online (Sandbox Code Playgroud)
我尝试使用十进制,但数字大小不同,所以这也没有用
CONVERT(varchar(100), Cast(float_field as decimal(38, 0)))
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
更新:
样本值为2.2000012095022E + 26.
cod*_*ger 231
尝试使用该STR()
功能.
SELECT STR(float_field, 25, 5)
Run Code Online (Sandbox Code Playgroud)
另一个注意事项:这个垫子左边有空格.如果这是一个问题,请结合LTRIM
:
SELECT LTRIM(STR(float_field, 25, 5))
Run Code Online (Sandbox Code Playgroud)
adi*_*nas 41
我找到的唯一查询位返回EXACT相同的原始数字是
CONVERT (VARCHAR(50), float_field,128)
Run Code Online (Sandbox Code Playgroud)
请参阅http://www.connectsql.com/2011/04/normal-0-microsoftinternetexplorer4.html
上面的其他解决方案有时会在最后舍入或添加数字
更新:根据下面的评论以及我在https://msdn.microsoft.com/en-us/library/ms187928.aspx中可以看到的内容:
CONVERT (VARCHAR(50), float_field,3)
Run Code Online (Sandbox Code Playgroud)
应该在新的SQL Server版本(Azure SQL数据库,从SQL Server 2016 RC3中启动)中使用
mol*_*lar 12
这是我最终在sqlserver 2012中使用的解决方案(因为所有其他建议都有截断部分或其他缺点的缺点).
declare @float float = 1000000000.1234;
select format(@float, N'#.##############################');
Run Code Online (Sandbox Code Playgroud)
输出:
1000000000.1234
Run Code Online (Sandbox Code Playgroud)
这具有进一步的优势(在我的情况下),使千位分隔符和本地化变得容易:
select format(@float, N'#,##0.##########', 'de-DE');
Run Code Online (Sandbox Code Playgroud)
输出:
1.000.000.000,1234
Run Code Online (Sandbox Code Playgroud)
小智 8
SELECT LTRIM(STR(float_field, 25, 0))
Run Code Online (Sandbox Code Playgroud)
是最好的方法,这样您就不会.0000
在值的末尾添加任何数字。
小智 6
首先转换为 a integer
,然后转换为 a string
:
cast((convert(int,b.tax_id)) as varchar(20))
Run Code Online (Sandbox Code Playgroud)