cast or convert a float to nvarchar?
我需要从数据类型float的一列中进行选择,并将其作为nvarchar插入另一列中。
我尝试投射它:
结果为
有人知道如何正确地转换或转换此数据吗?
检查STR。您需要类似
如果您将电话号码存储在浮点型列中(这是一个坏主意),那么它们大概都是整数,可以在转换为nvarchar之前将其转换为int。
因此而不是:
1 2 | SELECT CAST(CAST(1234567890 AS FLOAT) AS nvarchar(50)) 1.23457e+009 |
您将使用:
1 2 | SELECT CAST(CAST(CAST(1234567890 AS FLOAT) AS INT) AS nvarchar(50)) 1234567890 |
在这些示例中,最里面的
我真的建议您不要将电话号码存储在花车中!
如果电话号码以零开头怎么办?
1 2 | SELECT CAST(0100884555 AS FLOAT) 100884555 |
哇!我们只是存储了错误的电话号码...
请勿使用浮点数存储精度要求的定点数据。
此示例说明如何将浮点数正确转换为NVARCHAR(50),同时还说明了为什么对精确度数据使用浮点数是个坏主意。
1 2 3 4 5 6 7 8 9 10 | 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 |
输出
1 2 | 9.07235e+009 9072351234 9.07235e+020 907235123400000010000 |
您可能会注意到第二个输出以\\'10000 \\'结尾,即使我们尝试存储在表中的数据以\\'00000 \\'结尾。这是因为
对于愿意尝试其他方法的任何人,他们可以使用以下方法:
1 | SELECT FORMAT([Column_Name], '') FROM YourTable |
这将轻松将任何float值更改为nvarchar。
您还可以执行以下操作:
1 | SELECT CAST(CAST(34512367.392 AS DECIMAL(30,9)) AS NVARCHAR(100)) |
输出:
浮点数不会直接转换为NVARCHAR,首先我们需要将浮点数转换为money数据类型,然后再转换为NVARCHAR,请参见下面的示例。
例1
1 | SELECT CAST(CAST(1234567890.1234 AS FLOAT) AS NVARCHAR(100)) |
输出
1 | 1.23457e+009 |
例2
1 | SELECT CAST(CAST(CAST(1234567890.1234 AS FLOAT) AS MONEY) AS NVARCHAR(100)) |
输出
1 | 1234567890.12 |
在Example2中,值转换为float到NVARCHAR
1 2 3 4 5 | DECLARE @MyFloat [FLOAT] SET @MyFloat = 1000109360.050 SELECT REPLACE (RTRIM (REPLACE (REPLACE (RTRIM ((REPLACE (CAST (CAST (@MyFloat AS DECIMAL (38 ,18 )) AS VARCHAR( MAX)), '0' , ' '))), ' ' , '0'), '.', ' ')), ' ','.') |