Niet over hoe efficiënt dit zal zijn:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Uitleg:
- Verwijder % door te vervangen door spatie
- Vervang
,met. - Verwijder alle voorloop- of volgspaties.
- Converteren naar
decimal(28, 10).
Bijwerken:
Volgens aanvullende informatie van 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
Uitleg van '[0-9]%[,.]%[%0-9]' :
[0-9]- We zijn alleen geïnteresseerd als de gegevens beginnen met een cijfer.%- Na het nummer mag het elk(e) teken(s) bevatten. Wij zorgen voor niet-numeriek metisnumericinwhereclausule.[,.]- We hebben de gegevens om,. te hebben of..%- Na[,.]het kan elk(e) teken(s) bevatten. Wij zorgen voor niet-numeriek metisnumericinwhereclausule.[%0-9]- We willen dat de gegevens eindigen met een cijfer of%.
Opmerking: U moet '[0-9]%[,.]%[%0-9]' aanpassen naarmate je meer slechte karakters vindt.
Referenties:
- SQLFiddle om mee te spelen:https://sqlfiddle.com/#!3/09a34 /4
LIKE- https://msdn.microsoft.com /nl-nl/bibliotheek/ms179859(v=sql.90).aspx