SQL Server 2008 - 从 Float 将列更改为 Varchar 产生科学记数法

Posted

技术标签:

【中文标题】SQL Server 2008 - 从 Float 将列更改为 Varchar 产生科学记数法【英文标题】:SQL Server 2008 - Alter column to Varchar from Float produces Scientific Notation 【发布时间】:2013-11-20 17:06:06 【问题描述】:

我必须将表中当前为 Float 的列之一更改为 Varchar,但是当我使用 alter 命令时,它会以科学记数法存储一些较长的数字。

我可以避免这种情况吗?

如果没有,有没有办法在以后轻松更新表格以将科学记数法存储为普通整数?

谢谢

【问题讨论】:

如果添加一个新的 varchar 列并通过将浮点数转换为 varchars 来更新它会发生什么? 我在CAST(ColumnName AS VARCHAR(100))987654323@时得到科学计数法的结果 这个问题之前已经回答过了。 ***.com/questions/6521354/…***.com/questions/3715675/… 能不能先把列改成数值类型,比如bigint或者decimal(38,19),再改成varchar? 它有效,但再次与下面的答案具有相同的效果。 bigint 删除小数点后的所有内容,而小数点导致尾随零。我不想要尾随的零。 【参考方案1】:

请检查链接

convert float into varchar in SQL server without scientific notation

您可以将浮点数转换为 varchar(max)

How to convert float to varchar in SQL Server

【讨论】:

我将此标记为答案,但我发现 Anon 的评论非常有帮助。我最初将我的数据转换为十进制(38,19),然后使用更新语句删除尾随零。 Update MyTable SET MyColumn = LEFT(MyColumn,CHARINDEX('.',MyColumn) - 1) where CAST(SUBSTRING(MyColumn, CHARINDEX('.',MyColumn),LEN(MyColumn)-1) AS float) = 0【参考方案2】:

我有一个我过去使用过的解决方法。丹离得不远,但只是施放它是行不通的。您可以通过添加新的 varchar 列然后使用 str 和 ltrim 从旧的 float 列更新新列来更改表。假设您的 varchar 列是 varchar(50),请使用以下内容:

更新 YourTable 设置 NewColumn = ltrim(str(OldColumn, 50))

str() 转换为字符数据, ltrim() 去掉左侧任何多余的空格。然后,您可以随时摆脱旧列。感觉很笨拙,但应该适合你。

【讨论】:

这仅适用于整数,因为小数点后的任何内容都会丢失。

以上是关于SQL Server 2008 - 从 Float 将列更改为 Varchar 产生科学记数法的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server 2008 R2 定时备份任务设定

在 sql server 2008 中使用地理数据类型的两点之间的距离?

sql server 2008 之利用SQL Server Management Studio创建数据库(最基础)

从开发人员的 POV 看 SQL Server 2008 和 SQL Server 2008 R2 之间的差异

从 SQL Server 2008 升级应用程序以使用 SQL Server 2016

将数据库从 SQL Server 2012 转移到 SQL Server 2008 [关闭]