( Si está utilizando SQL Server 2012 o más reciente, consulte la respuesta de @ wBob para 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 (o desea) el separador de miles cuando realiza la conversión NUMERIC
, independientemente de si se trata de una coma, un punto o un espacio, por lo que debe deshacerse de ellos primero. Luego convierta 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 CONVERTIR , pero nada se aplica aquí.
La función FORMATO , pero el tipo de entrada debe ser un valor numérico o de fecha / hora / fecha y hora (eso y se introdujo en SQL Server 2012, por lo que no es aplicable 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 tuve tanta suerte.
Además, solo por mencionar que, 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 pre-hecha 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