将带百分号 (%) 的大小数转换为小数

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;

然后清理一下。这应该是一个教训,告诉你为什么你从不在字符串列中存储数值。