SQL - 如何将数据类型float更改为nvarchar并删除科学记数法

时间:2017-05-02 07:08:17

标签: sql sql-server

如何将数据类型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个索引后添加了零。我怎么能这样做?我查看了转换函数,但这仅用于转换日期时间数据类型。

3 个答案:

答案 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