( Se si utilizza SQL Server 2012 o versioni successive, consultare la risposta di @ wBob per un approccio più pulito. L'approccio descritto nella mia risposta di seguito è necessario solo se si utilizza SQL Server 2008 R2 o versioni precedenti. )
Non è necessario (o non si desidera) il separatore delle migliaia durante la conversione NUMERIC
, indipendentemente dal fatto che si tratti di virgola, punto o spazio, quindi eliminarli prima. Quindi converti la virgola in un punto / decimale e hai finito:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
Ritorna:
7000.45
Per completezza, dovrei menzionare che ho anche provato:
SET LANGUAGE Greek;
Guardando vari stili di formato per CONVERT , ma qui non si applica nulla.
La funzione FORMAT , ma il tipo di input deve essere un valore numerico o data / ora / datetime (che è stato introdotto in SQL Server 2012, quindi non applicabile a SQL Server 2008 R2 o precedenti).
E nient'altro sembrava funzionare. Speravo di trovare qualcosa di più elegante di due REPLACE
chiamate, ma finora nessuna tale fortuna.
Inoltre, solo per citare, sebbene non sia una soluzione T-SQL pura, ciò può essere realizzato anche tramite SQLCLR. E c'è una funzione pre-fatta che lo fa nella libreria SQL # (che ho scritto) chiamata String_TryParseToDecimal . Questa funzione è disponibile nella versione gratuita e funziona in tutte le versioni di SQL Server a partire da SQL Server 2005:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
Ritorna:
7000.45000000000000000000