sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan caster man SQL-understreng til decimal?

Tænk ikke på, hvor effektivt dette vil være:

Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm 
where AdditionalDescription like '%[%]%'

Forklaring:

  1. Fjern % ved at erstatte med mellemrum
  2. Erstat , med .
  3. Fjern eventuelle førende eller efterfølgende mellemrum.
  4. Konverter til decimal(28, 10) .

Opdatering:

I henhold til yderligere info fra 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

Forklaring af '[0-9]%[,.]%[%0-9]' :

  • [0-9] - Vi er først interesserede, når dataene starter med et tal.
  • % - Efter tallet kan det indeholde et hvilket som helst tegn. Vi tager os af ikke-numerisk med isnumeric i where klausul.
  • [,.] - Vi har data til at have enten , eller . .
  • % - Efter [,.] det kan indeholde et hvilket som helst tegn. Vi tager os af ikke-numerisk med isnumeric i where klausul.
  • [%0-9] - Vi ønsker, at dataene skal slutte med enten et ciffer eller % .

Bemærk: Du bliver nødt til at ændre '[0-9]%[,.]%[%0-9]' efterhånden som du finder flere dårlige karakterer.

Referencer:

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


  1. Sådan opretter du en simpel valgforespørgsel i designvisning i Access 2016

  2. Hvorfor må måltabellen for en MERGE-sætning ikke have aktiverede regler?

  3. udskiftning af firkantede parenteser af en streng med oracle REGEXP_REPLACE funktion

  4. Mysql:Find rækker, hvor kolonneværdien slutter med en bestemt understreng