Не мислете колко ефективно ще бъде това:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Обяснение:
- Премахване на % чрез замяна с интервал
- Заменете
,
с.
- Премахнете всякакви начални или завършващи интервали.
- Преобразуване в
decimal(28, 10)
.
Актуализация:
Според допълнителна информация от 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
Обяснение на '[0-9]%[,.]%[%0-9]'
:
[0-9]
- Интересуваме се само когато данните започват с число.%
- След числото може да съдържа всеки символ(и). Ние се грижим за нечисловите сisnumeric
вwhere
клауза.[,.]
- Разполагаме с данни за,
или.
.%
- След[,.]
може да съдържа всеки символ(и). Ние се грижим за нечисловите сisnumeric
вwhere
клауза.[%0-9]
- Искаме данните да завършват или с цифра, или с%
.
Забележка: Ще трябва да промените '[0-9]%[,.]%[%0-9]'
тъй като намирате повече лоши герои.
Референции:
- SQLFiddle за игра:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx