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 metisnumeric
inwhere
clausule.[,.]
- We hebben de gegevens om,
. te hebben of.
.%
- Na[,.]
het kan elk(e) teken(s) bevatten. Wij zorgen voor niet-numeriek metisnumeric
inwhere
clausule.[%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:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /nl-nl/bibliotheek/ms179859(v=sql.90).aspx