Non sapere quanto sarà efficiente:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Spiegazione:
- Rimuovi % sostituendo con spazio
- Sostituisci
,con. - Rimuovi gli spazi iniziali o finali.
- Converti in
decimal(28, 10).
Aggiornamento:
Come da informazioni aggiuntive di 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
Spiegazione di '[0-9]%[,.]%[%0-9]' :
[0-9]- Siamo interessati solo quando i dati iniziano con un numero.%- Dopo il numero può contenere qualsiasi carattere. Ci occupiamo dei non numerici conisnumericinwhereclausola.[,.]- Abbiamo i dati per avere,o..%- Dopo[,.]può contenere qualsiasi carattere. Ci occupiamo dei non numerici conisnumericinwhereclausola.[%0-9]- Vogliamo che i dati terminino con una cifra o con%.
Nota: Dovrai modificare '[0-9]%[,.]%[%0-9]' man mano che trovi altri cattivi personaggi.
Riferimenti:
- SQLFiddle con cui giocare:https://sqlfiddle.com/#!3/09a34 /4
LIKE- https://msdn.microsoft.com /it-it/library/ms179859(v=sql.90).aspx