我需要从一列数据类型float中选择并将其作为nvarchar插入另一列。
我试图施展它:cast([Column_Name] as nvarchar(50))
结果是9.07235e+009
而不是10位数字(电话号码)。
有没有人知道如何正确转换或转换这些数据?
答案 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,请参见下面的示例。
SELECT CAST(CAST(1234567890.1234 AS FLOAT) AS NVARCHAR(100))
输出
1.23457e+009
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'),'。','')),'','。')