sql >> Databasteknik >  >> RDS >> Sqlserver

Hur castar man SQL-delsträng till decimal?

Tänk inte på hur effektivt detta kommer att vara:

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

Förklaring:

  1. Ta bort % genom att ersätta med blanksteg
  2. Ersätt , med .
  3. Ta bort alla inledande eller efterföljande mellanslag.
  4. Konvertera till decimal(28, 10) .

Uppdatering:

Enligt ytterligare information av 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

Förklaring av '[0-9]%[,.]%[%0-9]' :

  • [0-9] – Vi är bara intresserade när uppgifterna börjar med ett nummer.
  • % - Efter numret kan det innehålla vilket tecken som helst. Vi tar hand om icke-numeriska med isnumeric i where klausul.
  • [,.] - Vi har data för att ha antingen , eller . .
  • % - Efter [,.] den kan innehålla vilket tecken som helst. Vi tar hand om icke-numeriska med isnumeric i where klausul.
  • [%0-9] - Vi vill att data ska sluta med antingen en siffra eller % .

Obs! Du måste ändra '[0-9]%[,.]%[%0-9]' när du hittar fler dåliga karaktärer.

Referenser:

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


  1. Elastic Beanstalk skapar inte RDS-parametrar

  2. Summa över partitioner med fönsterfunktioner

  3. pgbackups på Heroku hittades inte

  4. mysql överlappar två tabeller i tidsstämplar