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 NULL
p.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
HTH