Tänk inte på hur effektivt detta kommer att vara:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Förklaring:
- Ta bort % genom att ersätta med blanksteg
- Ersätt
,
med.
- Ta bort alla inledande eller efterföljande mellanslag.
- Konvertera till
decimal(28, 10)
.
Uppdatering:
Enligt ytterligare information av 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
Förklaring av '[0-9]%[,.]%[%0-9]'
:
[0-9]
– Vi är bara intresserade när uppgifterna börjar med ett nummer.%
- Efter numret kan det innehålla vilket tecken som helst. Vi tar hand om icke-numeriska medisnumeric
iwhere
klausul.[,.]
- Vi har data för att ha antingen,
eller.
.%
- Efter[,.]
den kan innehålla vilket tecken som helst. Vi tar hand om icke-numeriska medisnumeric
iwhere
klausul.[%0-9]
- Vi vill att data ska sluta med antingen en siffra eller%
.
Obs! Du måste ändra '[0-9]%[,.]%[%0-9]'
när du hittar fler dåliga karaktärer.
Referenser:
- SQLFiddle att spela med:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx