No se preocupe por lo eficiente que será:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Explicación:
- Eliminar % reemplazándolo con espacio
- Reemplazar
,con. - Elimine los espacios iniciales o finales.
- Convertir a
decimal(28, 10).
Actualizar:
Según información adicional de OP.
Select
convert(decimal(28,10),replace(replace(replace(rtrim(ltrim(AdditionalDescription)), ' ',''),',','.'),'%','')) AS PercentAddition
from test
where replace(rtrim(ltrim(AdditionalDescription)), ' ','')
like '[0-9]%[,.]%[%0-9]'
and
isnumeric(replace(replace(replace(rtrim(ltrim(AdditionalDescription)), ' ',''),',','.'),'%',''))=1
Explicación de '[0-9]%[,.]%[%0-9]' :
[0-9]- Solo nos interesa cuando los datos comienzan con un número.%- Después del número puede contener cualquier caracter(es). Nos ocupamos de los no numéricos conisnumericenwherecláusula.[,.]- Tenemos los datos para tener,o..%- Después de[,.]puede contener cualquier caracter(es). Nos ocupamos de los no numéricos conisnumericenwherecláusula.[%0-9]- Queremos que los datos terminen con un dígito o%.
'[0-9]%[,.]%[%0-9]' a medida que encuentres más personajes malos.
Referencias:
- SQLFiddle para jugar:https://sqlfiddle.com/#!3/09a34 /4
LIKE- https://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx