sql >> Database >  >> RDS >> Sqlserver

Hoe SQL-subtekenreeks naar decimaal te casten?

Niet over hoe efficiënt dit zal zijn:

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

Uitleg:

  1. Verwijder % door te vervangen door spatie
  2. Vervang , met .
  3. Verwijder alle voorloop- of volgspaties.
  4. Converteren naar decimal(28, 10) .

Bijwerken:

Volgens aanvullende informatie van 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

Uitleg van '[0-9]%[,.]%[%0-9]' :

  • [0-9] - We zijn alleen geïnteresseerd als de gegevens beginnen met een cijfer.
  • % - Na het nummer mag het elk(e) teken(s) bevatten. Wij zorgen voor niet-numeriek met isnumeric in where clausule.
  • [,.] - We hebben de gegevens om , . te hebben of . .
  • % - Na [,.] het kan elk(e) teken(s) bevatten. Wij zorgen voor niet-numeriek met isnumeric in where clausule.
  • [%0-9] - We willen dat de gegevens eindigen met een cijfer of % .

Opmerking: U moet '[0-9]%[,.]%[%0-9]' aanpassen naarmate je meer slechte karakters vindt.

Referenties:

  1. SQLFiddle om mee te spelen:http://sqlfiddle.com/#!3/09a34 /4
  2. LIKE - http://msdn.microsoft.com /nl-nl/bibliotheek/ms179859(v=sql.90).aspx


  1. AttributeError:'UUID'-object heeft geen kenmerk 'replace' bij gebruik van backend-agnostisch GUID-type

  2. Moet een opsomming in MySQL NIET NULL zijn?

  3. MYSQL berekent een gemiddelde op een telling

  4. SQL Server Bulk Insert – Deel 1