Machen Sie sich keine Gedanken darüber, wie effizient dies sein wird:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Erklärung:
- Entfernen Sie % durch Ersetzen durch Leerzeichen
- Ersetzen Sie
,
mit.
- Entfernen Sie alle führenden oder nachfolgenden Leerzeichen.
- In
dezimal(28, 10)
umwandeln .
Aktualisierung:
Gemäß zusätzlichen Informationen von 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
Erklärung von '[0-9]%[,.]%[%0-9]'
:
[0-9][code> - Wir sind nur interessiert, wenn die Daten mit einer Zahl beginnen.
%
- Nach der Zahl darf es beliebige Zeichen geben. Nicht-numerisch kümmern wir uns mitisnumeric
inwo
Klausel.[,.]
- Wir haben die Daten, um entweder,
zu haben oder.
.%
- Nach[,.]
es kann beliebige Zeichen enthalten. Nicht-numerisch kümmern wir uns mitisnumeric
inwo
Klausel.[%0-9][code> - Wir möchten, dass die Daten entweder mit einer Ziffer oder
%
enden .
Hinweis: Sie müssen '[0-9]%[,.]%[%0-9]'
ändern wenn du mehr schlechte Charaktere findest.
Referenzen:
- SQLFiddle zum Spielen:http://sqlfiddle.com/#!3/09a34 /4
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx