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 conisnumeric
enwhere
cláusula.[,.]
- Tenemos los datos para tener,
o.
.%
- Después de[,.]
puede contener cualquier caracter(es). Nos ocupamos de los no numéricos conisnumeric
enwhere
clá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:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx