Saltar al contenido

Convertir string valores numéricos con coma como separador decimal a NUMERIC(10, 2)

Te damos la bienvenida a proyecto on line, en este lugar encontrarás la solucíon que estás buscando.

Solución:

(Si está utilizando SQL Server 2012 o más reciente, consulte la respuesta de @wBob para obtener un enfoque más limpio. El enfoque descrito en mi respuesta a continuación solo es necesario si está utilizando SQL Server 2008 R2 o anterior.)

No necesita (ni desea) el separador de miles al convertir a NUMERIC, sin importar si es coma, punto o espacio, así que deshágase de ellos primero. Luego convierte la coma en un punto/decimal y listo:

SELECT CONVERT(NUMERIC(10, 2), 
               REPLACE(
                       REPLACE('7.000,45', '.', ''),
                       ',', '.'
                      )
              ) AS [Converted];

Devoluciones:

7000.45

En aras de la exhaustividad, debo mencionar que también probé:

  • SET LANGUAGE Greek;

  • Mirando varios estilos de formato para CONVERT, pero nada se aplica aquí.

  • La función FORMAT, pero el tipo de entrada debe ser un valor numérico o de fecha/hora/fechahora (eso y se introdujo en SQL Server 2012, por lo que no se aplica a SQL Server 2008 R2 o anterior).

Y nada más parecía funcionar. Esperaba encontrar algo más elegante que dos REPLACE llamadas, pero hasta ahora no hubo tanta suerte.


Además, solo para mencionar, aunque no es una solución T-SQL pura, esto también se puede lograr a través de SQLCLR. Y hay una función prefabricada que hace esto en la biblioteca SQL# (que escribí) llamada String_TryParseToDecimal. Esta función está disponible en la versión gratuita y funciona en todas las versiones de SQL Server a partir de SQL Server 2005:

SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');

Devoluciones:

7000.45000000000000000000

¿Qué versión de SQL Server estás usando? Desde SQL Server 2012 en adelante, puede usar TRY_PARSE con su USING culture argumento. También puede usar PARSE, siendo la diferencia PARSE fallará si la conversión falla y TRY_PARSE devolverá un NULLp.ej

DECLARE @t TABLE ( x VARCHAR(10) )

INSERT INTO @t
VALUES ( '7.000,45' ), ( 'xxx' )

SELECT x, 
    TRY_PARSE( x AS NUMERIC(10,2) USING 'El-GR' ) x
FROM @t

resultados de la prueba

HTH

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *