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

Come eseguire il cast della sottostringa SQL in decimale?

Non sapere quanto sarà efficiente:

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

Spiegazione:

  1. Rimuovi % sostituendo con spazio
  2. Sostituisci , con .
  3. Rimuovi gli spazi iniziali o finali.
  4. Converti in decimal(28, 10) .

Aggiornamento:

Come da informazioni aggiuntive di 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

Spiegazione di '[0-9]%[,.]%[%0-9]' :

  • [0-9] - Siamo interessati solo quando i dati iniziano con un numero.
  • % - Dopo il numero può contenere qualsiasi carattere. Ci occupiamo dei non numerici con isnumeric in where clausola.
  • [,.] - Abbiamo i dati per avere , o . .
  • % - Dopo [,.] può contenere qualsiasi carattere. Ci occupiamo dei non numerici con isnumeric in where clausola.
  • [%0-9] - Vogliamo che i dati terminino con una cifra o con % .

Nota: Dovrai modificare '[0-9]%[,.]%[%0-9]' man mano che trovi altri cattivi personaggi.

Riferimenti:

  1. SQLFiddle con cui giocare:http://sqlfiddle.com/#!3/09a34 /4
  2. LIKE - http://msdn.microsoft.com /it-it/library/ms179859(v=sql.90).aspx