Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich eine SQL-Teilzeichenfolge in eine Dezimalzahl umwandeln?

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:

  1. Entfernen Sie % durch Ersetzen durch Leerzeichen
  2. Ersetzen Sie , mit .
  3. Entfernen Sie alle führenden oder nachfolgenden Leerzeichen.
  4. 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 mit isnumeric in wo Klausel.
  • [,.] - Wir haben die Daten, um entweder , zu haben oder . .
  • % - Nach [,.] es kann beliebige Zeichen enthalten. Nicht-numerisch kümmern wir uns mit isnumeric in wo 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:

  1. SQLFiddle zum Spielen:http://sqlfiddle.com/#!3/09a34 /4
  2. LIKE - http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx