如何在SQL Server中将float转换为varchar

hgu*_*yan 122 sql-server-2008

我有一个浮点列,其中包含不同长度的数字,我正在尝试将它们转换为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)

STR()函数


另一个注意事项:这个垫子左边有空格.如果这是一个问题,请结合LTRIM:

SELECT LTRIM(STR(float_field, 25, 5))
Run Code Online (Sandbox Code Playgroud)

  • @hgulyan - 选择LTRIM(Str(float_field,38,0))`对你的数据有用吗? (4认同)
  • 我希望SSMS中有一个警告"嘿,当你将那个错误的浮动电话字段转换为文本时,准备好用科学记数法得到一个好的电话号码!我们不够聪明,首先是ltrim(str)"...... (4认同)
  • 我有*************************.那是什么?:) (3认同)
  • @hgulyan-最后十位是零,因为这是`Str`函数中最后一个参数的含义.小数点后的位数.你看过我发布的链接了吗?将零更改为10.`选择LTRIM(Str(float_field,38,10))` (2认同)

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中启动)中使用

  • @adinas为+1,浮点值按原样转换,但"0"浮点值除外转换为"0.0E0".我需要将float字段转换为`varchar`,因为我需要在`NULL`和`0`时显示`NA`.我通过在查询中添加`CASE`语句实现了这一点,如下所示; `CASE WHEN float_field是NULL然后'NA'当float_field = 0那么'0'ELSE CONVERT(VARCHAR,float_field,128)END AS float_As_VChar` (2认同)
  • 根据微软的文档 - https://msdn.microsoft.com/en-us/library/ms187928.aspx,出于传统原因包含128语法,可能会在将来的版本中被删除 (2认同)
  • 128 已弃用,但在最新的 SQL Server 版本中 3 似乎是它的替代品。 (2认同)

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)

  • 这将删除小数点后的数字(如果有)。因此,这个解决方案并不准确。 (2认同)