SQL 服务器在转换为 varchar 时更改 float 列中的值
SQL Server changes the value in the float column when converting to varchar
我的 table 中有一列是 float
类型的。 table 是在我将电子表格 (Excel) 数据导入数据库时自动生成的。因此,我希望将一列从 float
更改为 varchar
,但是当我尝试这样做时,出现错误:
'tblInvoices' table
Unable to create index 'IX_tblInvoices'.
The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.tblInvoices' and the index name 'IX_tblInvoices'.
The duplicate key value is (1.00001e+006). The statement has been terminated.
它是一个唯一的列,并且这样设置(由于某些原因没有设置为主键)。我已经有 运行 个查询来搜索和删除重复字段,但还有 none。我运行的查询如下:
WITH CTE AS
(
SELECT
Invoice,
RN = ROW_NUMBER()OVER(PARTITION BY Invoice ORDER BY Invoice)
FROM
dbo.tblInvoices
)
DELETE FROM CTE
WHERE RN > 1
所以 Invoice
列中的值是 1000010,当我 运行 下面的查询找到一行时。
SELECT *
FROM [TradeReceivables_APR_IFRS9].[dbo].[tblInvoices]
WHERE Invoice = 1.00001e+006
请注意,我搜索的是错误中的值,1.00001e+006,而不是 1000010。
所以我的问题是为什么 DBMS 会这样做?为什么它会这样改变价值?当我删除该列时,它会与另一列一起执行,依此类推(总共约 40 000 行)。如何在不更改数据和出错的情况下将列从 float
更改为 varchar
?
任何帮助将不胜感激!
该字段似乎是一个整数,因此您可以先将其转换为 BIGINT
,然后再转换为 VARCHAR
Declare @Invoice as float = 1.00001e+006
print cast(@Invoice as varchar) -->> Result : 1.00001e+006
print cast(cast(@Invoice as bigint) as varchar) -->> Result : 1000010
我的 table 中有一列是 float
类型的。 table 是在我将电子表格 (Excel) 数据导入数据库时自动生成的。因此,我希望将一列从 float
更改为 varchar
,但是当我尝试这样做时,出现错误:
'tblInvoices' table
Unable to create index 'IX_tblInvoices'.
The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.tblInvoices' and the index name 'IX_tblInvoices'.
The duplicate key value is (1.00001e+006). The statement has been terminated.
它是一个唯一的列,并且这样设置(由于某些原因没有设置为主键)。我已经有 运行 个查询来搜索和删除重复字段,但还有 none。我运行的查询如下:
WITH CTE AS
(
SELECT
Invoice,
RN = ROW_NUMBER()OVER(PARTITION BY Invoice ORDER BY Invoice)
FROM
dbo.tblInvoices
)
DELETE FROM CTE
WHERE RN > 1
所以 Invoice
列中的值是 1000010,当我 运行 下面的查询找到一行时。
SELECT *
FROM [TradeReceivables_APR_IFRS9].[dbo].[tblInvoices]
WHERE Invoice = 1.00001e+006
请注意,我搜索的是错误中的值,1.00001e+006,而不是 1000010。
所以我的问题是为什么 DBMS 会这样做?为什么它会这样改变价值?当我删除该列时,它会与另一列一起执行,依此类推(总共约 40 000 行)。如何在不更改数据和出错的情况下将列从 float
更改为 varchar
?
任何帮助将不胜感激!
该字段似乎是一个整数,因此您可以先将其转换为 BIGINT
,然后再转换为 VARCHAR
Declare @Invoice as float = 1.00001e+006
print cast(@Invoice as varchar) -->> Result : 1.00001e+006
print cast(cast(@Invoice as bigint) as varchar) -->> Result : 1000010