Eug*_*ene 26 sql t-sql sql-server casting
我需要从一列数据类型float中选择并将其作为nvarchar插入另一列.
我试图施展它: cast([Column_Name] as nvarchar(50))
结果是9.07235e+009
而不是10位数字(电话号码).
有没有人知道如何正确地转换或转换这些数据?
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)
哎呦!我们刚存储了错误的电话号码......
不要使用浮动来存储定点,精度要求的数据.此示例显示如何正确地将浮点数转换为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。
归档时间: |
|
查看次数: |
95798 次 |
最近记录: |