我有一个名为 latitude 的列,目前是 varchar(20)
我想将它转换为 DECIMAL(9,6)
但是列中存储的数据大于 6 个小数点,即 48.123456891123456
有问题的表有超过 500 亿行,是一个 24/7 数据库,没有停机时间,并使用按月分区(SQL Server 2017 企业版)
我将如何实现转换,因为它对于 6 个小数点来说太大了。我正在考虑创建列的副本并在转换时重命名,但是我不确定如何实现截断为小数点后 6 位
我有一个名为 latitude 的列,目前是 varchar(20)
我想将它转换为 DECIMAL(9,6)
但是列中存储的数据大于 6 个小数点,即 48.123456891123456
有问题的表有超过 500 亿行,是一个 24/7 数据库,没有停机时间,并使用按月分区(SQL Server 2017 企业版)
我将如何实现转换,因为它对于 6 个小数点来说太大了。我正在考虑创建列的副本并在转换时重命名,但是我不确定如何实现截断为小数点后 6 位
如果您不介意四舍五入,您可以一步完成您想要的操作:
这可以是 SQL Server 2016 或更高版本中的联机操作。
如果您需要截断(不是圆形),事情就更棘手了。您需要执行如下计算:
如果其中可能有一些非数字值,请改用
TRY_CONVERT
并在新列中接受空值,或使用提供默认值ISNULL
。如果目标是节省空间,您将需要重建表或运行
DBCC CLEANTABLE
(可能以小批量直到完成)来实现。删除的可变长度字符串列将继续占用空间,直到那时。