将float转换或转换为nvarchar?

时间:2011-02-03 00:54:09

标签: sql sql-server tsql casting

我需要从一列数据类型float中选择并将其作为nvarchar插入另一列。

我试图施展它:cast([Column_Name] as nvarchar(50))

结果是9.07235e+009而不是10位数字(电话号码)。

有没有人知道如何正确转换或转换这些数据?

7 个答案:

答案 0 :(得分:32)

检查STR。你需要像SELECT STR([Column_Name],10,0)这样的东西**这是SQL Server解决方案,其他服务器检查他们的文档。

答案 1 :(得分:14)

如果你将电话号码存储在浮点型列中(这是一个坏主意),那么它们可能都是整数,并且在转换为nvarchar之前可以转换为int。

所以而不是:

select cast(cast(1234567890 as float) as nvarchar(50))
1.23457e+009

你会使用:

select cast(cast(cast(1234567890 as float) as int) as nvarchar(50))
1234567890

在这些示例中,使用最里面的cast(1234567890 as float)代替从相应列中选择值。

我真的建议你不能将电话号码存放在花车中! 如果电话号码以零开头怎么办?

select cast(0100884555 as float)
100884555

糟糕!我们刚存储了错误的电话号码......

答案 2 :(得分:9)

不要使用浮动来存储定点的,准确性要求的数据。 此示例显示如何正确地将浮点数转换为NVARCHAR(50),同时还说明了为什么将浮点数用于精度数据是个坏主意。

create table #f ([Column_Name] float)
insert #f select 9072351234
insert #f select 907235123400000000000

select
    cast([Column_Name] as nvarchar(50)),
    --cast([Column_Name] as int), Arithmetic overflow
    --cast([Column_Name] as bigint), Arithmetic overflow
    CAST(LTRIM(STR([Column_Name],50)) AS NVARCHAR(50))
from #f

输出

9.07235e+009    9072351234
9.07235e+020    907235123400000010000

您可能会注意到第二个输出以'10000'结尾,即使我们尝试存储在表中的数据以'00000'结尾。这是因为float数据类型支持固定数量的有效数字,但这并没有延伸到那么远。

答案 3 :(得分:3)

对于愿意尝试其他方法的任何人,他们都可以使用此方法:

select FORMAT([Column_Name], '') from YourTable

这将轻松将任何float值更改为nvarchar。

答案 4 :(得分:1)

浮点数不会直接转换为NVARCHAR,首先我们需要将浮点数转换为money数据类型,然后再转换为NVARCHAR,请参见下面的示例。

Example1

SELECT CAST(CAST(1234567890.1234  AS FLOAT) AS NVARCHAR(100))

输出

1.23457e+009

Example2

SELECT CAST(CAST(CAST(1234567890.1234  AS FLOAT) AS MONEY) AS NVARCHAR(100))

输出

1234567890.12

在Example2中,值转换为float到NVARCHAR

答案 5 :(得分:1)

您还可以执行以下操作:

SELECT CAST(CAST(34512367.392 AS decimal(30,9)) AS NVARCHAR(100))

输出: 34512367.392000000

答案 6 :(得分:-1)

DECLARE @MyFloat [float]

SET @MyFloat = 1000109360.050

SELECT REPLACE(RTRIM(REPLACE(REPLACE((RTRIM((更新(CAST(@MyFloat AS DECIMAL(38,18))AS VARCHAR(max)),'0',''))),'' ,'0'),'。','')),'','。')