将float转换或转换为nvarchar?

Eug*_*ene 26 sql t-sql sql-server casting

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

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

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

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

a1e*_*x07 34

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

  • 如果它有帮助,我希望你能得到"+"/最佳答案:) (5认同)
  • 注意:STR会导致前导空格.例如:SELECT'A'+ STR(123.0,10,0)+'B'给出字符串"A 123B".首先必须使用LTRIM或CONVERT十进制. (3认同)

Cox*_*oxy 16

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

所以代替:

select cast(cast(1234567890 as float) as nvarchar(50))
1.23457e+009
Run Code Online (Sandbox Code Playgroud)

你会用:

select cast(cast(cast(1234567890 as float) as int) as nvarchar(50))
1234567890
Run Code Online (Sandbox Code Playgroud)

在这些示例中,使用最内层cast(1234567890 as float)代替从适当列中选择值.

我真的建议你不要在手机中存储电话号码!
如果电话号码以零开头怎么办?

select cast(0100884555 as float)
100884555
Run Code Online (Sandbox Code Playgroud)

哎呦!我们刚存储了错误的电话号码......


Ric*_*iwi 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
Run Code Online (Sandbox Code Playgroud)

产量

9.07235e+009    9072351234
9.07235e+020    907235123400000010000
Run Code Online (Sandbox Code Playgroud)

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


小智 6

对于任何愿意尝试不同方法的人,他们可以使用这个:

select FORMAT([Column_Name], '') from YourTable
Run Code Online (Sandbox Code Playgroud)

这将很容易将任何浮点值更改为 nvarchar。