2012-02-02 3 views
1

Je dois joindre deux tables basées sur des colonnes de types différents. La première colonne est une nvarchar(50) et la seconde colonne est de type float. La colonne nvarchar contient une représentation sous forme de chaîne de la valeur float, mais écrite en allemand, ce qui signifie que la virgule est utilisée comme séparateur décimal. Exemple: Le flotteur 26.1 est représenté par 26,1 dans la colonne nvarchar. J'ai essayé JOIN ... ON firstcolumn = CONVERT(NVARCHAR(50), secondcolumn) qui fonctionne pour tous les nombres sans fraction. Les colonnes avec fraction sont traduites en "26.1" ce qui évidemment ne correspond pas à "26,1".Localisation pour CONVERT

L'utilisation de SET LANGUAGE German ne fonctionnait pas.

Existe-t-il un moyen d'utiliser la localisation allemande pour l'instruction CONVERT, de sorte que la virgule au lieu du point soit utilisée? Ou dois-je utiliser REPLACE pour résoudre le problème?

Répondre

2

Vous devez utiliser REPLACE comme

firstcolumn = CAST(REPLACE(secondcolumn, ',', '.') as float) 

MAIS être très prudent lorsque l'on compare les types de virgule flottante, parfois préférable d'utiliser cette construction:

ABS(firstcolumn - CAST(REPLACE(secondcolumn, ',', '.') as float)) < @epsilon 

où @epsilon est erreur acceptable, say = 0.001

+0

Je vais comparer sur la représentation de la chaîne, donc je n'ai pas à gérer le problème de flotteur. Merci quand même. – okrumnow