SQLServer 2005 – Changer le caractère dans NVarChar

Je reçois des arguments dans une procédure stockée. Ces arguments sont NVARCHAR.

J'ai un problème, quand j'ai besoin de jeter certaines de ces valeurs à FLOATS, parce qu'ils sont reçus comme par exemple

@ VALUE1 NVARCHAR (100)

DECLARE @ChangedValue SET @ChangedValue = CAST (@ Value1 AS FLOAT)

Par exemple @ Value1 = "0,001"

Me donne un problème, car il s'attend à "0.001"

Je ne peux pas changer le format de l'input, mais puis-je le modifier d'une manière ou d'une autre sur le server SQL? En changeant tout "," en "." au lieu?

Cordialement, Kenn

Vous pouvez utiliser @VALUE1 = REPLACE(@VALUE1, ',', '.')

Cela semble pourtant une chose horrible à faire!

Comme Mitch l'a dit, ça ne sonne pas très bien et il serait bien mieux que le paramètre fourni soit de type float en premier lieu. Il vous a donné la solution qui résout votre problème pour le moment mais comme il l'a souligné, vous pourriez avoir des problèmes dans le futur.

Je suppose que la procédure est appelée par un code d'application, et je suppose que ces numbers sont des inputs de l'user. Si tel est le cas, la conversion doit se faire au niveau de l'application car cela prend en count les parameters régionaux et c'est le seul endroit qui contrôle le format de l'input de l'user.

Je ne connais pas vos données, mais assurez-vous que vous n'avez aucune valeur valide avec une virgule telle que 1 000. Changer cela à 1.000 en utilisant replace change le nombre réel impliqué de façon drastique.

Je voudrais corriger l'interface user afin que les numéros invalides ne peuvent pas être placés sur le terrain. Je voudrais également mettre une contrainte sur la table dans la database qui exige que le nombre soit dans une certaine plage ou un nombre valide une fois que vous avez nettoyé datatables. De cette façon, les mauvaises données ne peuvent pas entrer dans le champ pour commencer.