( Si vous utilisez SQL Server 2012 ou une version plus récente, veuillez consulter la réponse de @ wBob pour une approche plus propre. L'approche décrite dans ma réponse ci-dessous n'est requise que si vous utilisez SQL Server 2008 R2 ou une version antérieure. )
Vous n'avez pas besoin (ou ne voulez pas) du séparateur de milliers lors de la conversion en NUMERIC
, qu'il s'agisse d'une virgule, d'un point ou d'un espace, alors débarrassez-vous-en d'abord. Convertissez ensuite la virgule en un point / décimal et vous avez terminé:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
Retour:
7000.45
Par souci d'exhaustivité, je dois mentionner que j'ai également essayé:
SET LANGUAGE Greek;
En regardant différents styles de format pour CONVERT , mais rien ne s'applique ici.
La fonction FORMAT , mais le type d'entrée doit être une valeur numérique ou date / heure / date / heure (qui a été introduite dans SQL Server 2012, donc non applicable à SQL Server 2008 R2 ou version antérieure).
Et rien d'autre ne semblait fonctionner. J'espérais trouver quelque chose de plus élégant que deux REPLACE
appels, mais jusqu'à présent, pas de chance.
De plus, juste pour mentionner, bien qu'il ne s'agisse pas d'une solution T-SQL pure, cela peut également être accompli via SQLCLR. Et, il existe une fonction prédéfinie qui fait cela dans la bibliothèque SQL # (que j'ai écrite) nommée String_TryParseToDecimal . Cette fonction est disponible dans la version gratuite et fonctionne dans toutes les versions de SQL Server à partir de SQL Server 2005:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
Retour:
7000.45000000000000000000