sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo convertir la subcadena SQL a decimal?

No se preocupe por lo eficiente que será:

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

Explicación:

  1. Eliminar % reemplazándolo con espacio
  2. Reemplazar , con .
  3. Elimine los espacios iniciales o finales.
  4. Convertir a decimal(28, 10) .

Actualizar:

Según información adicional de 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

Explicación de '[0-9]%[,.]%[%0-9]' :

  • [0-9] - Solo nos interesa cuando los datos comienzan con un número.
  • % - Después del número puede contener cualquier caracter(es). Nos ocupamos de los no numéricos con isnumeric en where cláusula.
  • [,.] - Tenemos los datos para tener , o . .
  • % - Después de [,.] puede contener cualquier caracter(es). Nos ocupamos de los no numéricos con isnumeric en where cláusula.
  • [%0-9] - Queremos que los datos terminen con un dígito o % .

Nota: Tendrás que modificar '[0-9]%[,.]%[%0-9]' a medida que encuentres más personajes malos.

Referencias:

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