Neřešte, jak efektivní to bude:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Vysvětlení:
- Odeberte % nahrazením mezerou
- Nahraďte
,
s.
- Odstraňte všechny mezery na začátku nebo na konci.
- Převést na
decimal(28, 10)
.
Aktualizace:
Podle dalších informací 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
Vysvětlení '[0-9]%[,.]%[%0-9]'
:
[0-9]
- Zajímají nás pouze tehdy, když data začínají číslem.%
- Za číslem může obsahovat libovolný znak (znaky). O nečíselné se postaráme pomocíisnumeric
vwhere
doložka.[,.]
- Máme data, která mají buď,
nebo.
.%
- Za[,.]
může obsahovat libovolný znak (znaky). O nečíselné se postaráme pomocíisnumeric
vwhere
doložka.[%0-9]
- Chceme, aby data končila buď číslicí, nebo%
.
Poznámka: Budete muset upravit '[0-9]%[,.]%[%0-9]'
jak najdete další špatné postavy.
Odkazy:
- SQLFiddle na hraní:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx