Nie zastanawiaj się, jak będzie to wydajne:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Wyjaśnienie:
- Usuń %, zastępując spacją
- Zastąp
,
z.
- Usuń wszelkie spacje wiodące i końcowe.
- Konwertuj na
decimal(28, 10)
.
Aktualizacja:
Zgodnie z dodatkowymi informacjami 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
Wyjaśnienie '[0-9]%[,.]%[%0-9]'
:
[0-9]
- Interesuje nas tylko wtedy, gdy dane zaczynają się od liczby.%
- Po liczbie może zawierać dowolne znaki. Dbamy o nienumeryczne zisnumeric
wwhere
klauzula.[,.]
- Mamy dane do przechowywania,
lub.
.%
- Po[,.]
może zawierać dowolne znaki. Dbamy o nienumeryczne zisnumeric
wwhere
klauzula.[%0-9]
- Chcemy, aby dane kończyły się cyfrą lub%
.
Uwaga: Będziesz musiał zmodyfikować '[0-9]%[,.]%[%0-9]'
gdy znajdziesz więcej złych postaci.
Referencje:
- SQLFiddle do zabawy:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx