如何将数据类型float更改为nvarchar以删除科学记数法并仍然保持精度?请考虑以下事项:
CREATE TABLE ConversionDataType (ColumnData FLOAT);
INSERT INTO ConversionDataType VALUES (25566685456126);
INSERT INTO ConversionDataType VALUES (12345545546845);
INSERT INTO ConversionDataType VALUES (12345545545257);
当我做一个简单的阅读时,我得到了以下数据,如预期的那样:
select * from ConversionDataType
ColumnData
------------------------------------
25566685456126
12345545546845
12345545545257
现在,当我尝试将数据类型更新为nvarchar时,它会以科学记数法存储,这是我不想要的:
update ConversionDataType
set ColumnData = CAST(ColumnData AS NVARCHAR)
结果集如下:
25566700000000
12345500000000
12345500000000
它替换了一些数字并在第6个索引后添加了零。我怎么能这样做?我查看了转换函数,但这仅用于转换日期时间数据类型。
答案 0 :(得分:1)
有效的是其他人在评论中说的,如果你只是想在没有科学记数法的情况下将float转换为varchar,你需要转换为数字。你可以试试这个:
SELECT CAST(CAST(CAST(25566685456126291 AS FLOAT) AS NUMERIC) AS NVARCHAR)
输出:
C1
------------------------------
25566685456126292
而
SELECT CAST(CAST(25566685456126291 AS FLOAT) AS NVARCHAR) AS C1
给出:
C1
------------------------------
2.55667e+016
如果您需要更改数据类型,我认为您应该添加一个新列,更新它并(如果需要)删除旧列并在末尾重命名新列。
CREATE TABLE TEST1 (C1 FLOAT)
INSERT INTO TEST1 VALUES (25566685456126291);
ALTER TABLE TEST1 ADD C2 VARCHAR(18)
UPDATE TEST1 SET C2=CAST(CAST(C1 AS NUMERIC) AS VARCHAR)
SELECT * FROM TEST1
输出:
C1 C2
---------------------- ------------------
2.55666854561263E+16 25566685456126292
答案 1 :(得分:1)
SELECT CONVERT(NVARCHAR(250), StudentID) FROM TableA
StudentID是您的数据库浮点列
或简单地使用
SELECT CONVERT(NVARCHAR(250), yourFloatVariable)
答案 2 :(得分:1)
FLOAT
是一个非常糟糕的决定,因为这不是一个精确的数据类型。如果您想将电话号码存储为号码,则必须转而使用DECIMAL
。
但您必须使用NVARCHAR
代替。这是唯一合理的设计,因为电话号码可以有前导零或以加号开头。所以首先要引入NVARCHAR
列:
ALTER TABLE ConversionDataType ADD ColumnDataNew NVARCHAR(30);
在SQL Server中将数字转换为字符串的函数是FORMAT
。它允许您说明要用于转换的格式,在您的情况下为整数(简单'0'
):
update ConversionDataType set ColumnDataNew = format(ColumnData, '0');
最后删除旧列,然后重命名具有相同名称的新列。 SQL Server缺少ALTER TABLE
语法来重命名列,因此我们必须调用sp_RENAME
(至少这是我在互联网上阅读的内容;这里是文档的链接:{{3} })。
ALTER TABLE ConversionDataType DROP COLUMN ColumnData;
EXEC sp_RENAME 'ConversionDataType.ColumnDataNew', 'ColumnData', 'COLUMN';
您可以在此处看到结果:https://msdn.microsoft.com/de-de/library/ms188351.aspx