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 conisnumeric
inwhere
clausola.[,.]
- Abbiamo i dati per avere,
o.
.%
- Dopo[,.]
può contenere qualsiasi carattere. Ci occupiamo dei non numerici conisnumeric
inwhere
clausola.[%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:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /it-it/library/ms179859(v=sql.90).aspx