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 中使用地理数据类型的两点之间的距离?
sql server 2008 之利用SQL Server Management Studio创建数据库(最基础)
从开发人员的 POV 看 SQL Server 2008 和 SQL Server 2008 R2 之间的差异