将带百分号 (%) 的大小数转换为小数
Converting a large decimal with percentage sign (%) to a smaller decimal
我有以下数据需要转换为简单的小数。目前,它是 varchar 格式。数据位于名为 Commission%
的列中
Commission% (currently Varchar)
Commission% V2 (needs to be decimal)
87.00000%
.87
95.00000%
.95
我试过以下方法:
CAST(CAST(CONVERT(FLOAT,REPLACE([Commission %], ''%'', '''')) / 100 AS DECIMAL(10,6)) as DECIMAL(10,6))
但我收到以下错误消息将数据类型 varchar 转换为数字时出错。前几天我能够使用类似的东西,但当时尾随零的数量较少。
这几乎可以肯定是由于错误数据造成的,这是您将数字存储为字符串时应该预料到的情况。以下是您如何识别它们:
SELECT [KeyColumn], [Commission%]
FROM dbo.BadColumnNamesWow
WHERE [Commission%] IS NOT NULL
AND TRY_CONVERT(decimal(20,10), REPLACE([Commission%], '%', '')) IS NULL;
既然你现在说还有其他模式,那么只做这个来识别所有坏数据可能是有意义的:
SELECT * FROM dbo.BadColumnNamesWow
WHERE [Commission%] IS NOT NULL
AND PATINDEX('%[^0-9.]%', [Commission%]) > 0;
然后清理一下。这应该是一个教训,告诉你为什么你从不在字符串列中存储数值。
我有以下数据需要转换为简单的小数。目前,它是 varchar 格式。数据位于名为 Commission%
的列中Commission% (currently Varchar) | Commission% V2 (needs to be decimal) |
---|---|
87.00000% | .87 |
95.00000% | .95 |
我试过以下方法:
CAST(CAST(CONVERT(FLOAT,REPLACE([Commission %], ''%'', '''')) / 100 AS DECIMAL(10,6)) as DECIMAL(10,6))
但我收到以下错误消息将数据类型 varchar 转换为数字时出错。前几天我能够使用类似的东西,但当时尾随零的数量较少。
这几乎可以肯定是由于错误数据造成的,这是您将数字存储为字符串时应该预料到的情况。以下是您如何识别它们:
SELECT [KeyColumn], [Commission%]
FROM dbo.BadColumnNamesWow
WHERE [Commission%] IS NOT NULL
AND TRY_CONVERT(decimal(20,10), REPLACE([Commission%], '%', '')) IS NULL;
既然你现在说还有其他模式,那么只做这个来识别所有坏数据可能是有意义的:
SELECT * FROM dbo.BadColumnNamesWow
WHERE [Commission%] IS NOT NULL
AND PATINDEX('%[^0-9.]%', [Commission%]) > 0;
然后清理一下。这应该是一个教训,告诉你为什么你从不在字符串列中存储数值。