Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como converter a substring SQL para decimal?


Não se preocupe com o quão eficiente isso será:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm 
where AdditionalDescription like '%[%]%'

Explicação:
  1. Remova % substituindo por espaço
  2. Substituir , com .
  3. Remova quaisquer espaços à esquerda ou à direita.
  4. Converter para decimal(28, 10) .

Atualização:


Conforme informações adicionais do 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

Explicação de '[0-9]%[,.]%[%0-9]' :
  • [0-9] - Estamos interessados ​​apenas quando os dados começam com um número.
  • % - Após o número pode conter qualquer caractere(s). Cuidamos do não numérico com isnumeric em where cláusula.
  • [,.] - Temos os dados para ter , ou . .
  • % - Após [,.] pode conter qualquer caractere(s). Cuidamos do não numérico com isnumeric em where cláusula.
  • [%0-9] - Queremos que os dados terminem com um dígito ou % .

Observação: Você terá que modificar '[0-9]%[,.]%[%0-9]' à medida que você encontra mais personagens ruins.

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