Tænk ikke på, hvor effektivt dette vil være:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Forklaring:
- Fjern % ved at erstatte med mellemrum
- Erstat
,
med.
- Fjern eventuelle førende eller efterfølgende mellemrum.
- Konverter til
decimal(28, 10)
.
Opdatering:
I henhold til yderligere info fra 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
Forklaring af '[0-9]%[,.]%[%0-9]'
:
[0-9]
- Vi er først interesserede, når dataene starter med et tal.%
- Efter tallet kan det indeholde et hvilket som helst tegn. Vi tager os af ikke-numerisk medisnumeric
iwhere
klausul.[,.]
- Vi har data til at have enten,
eller.
.%
- Efter[,.]
det kan indeholde et hvilket som helst tegn. Vi tager os af ikke-numerisk medisnumeric
iwhere
klausul.[%0-9]
- Vi ønsker, at dataene skal slutte med enten et ciffer eller%
.
Bemærk: Du bliver nødt til at ændre '[0-9]%[,.]%[%0-9]'
efterhånden som du finder flere dårlige karakterer.
Referencer:
- SQLFiddle at lege med:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx