Convertir en un type de données décimal valide

J'ai une colonne [Cash] nvarchar(50) qui a des données qui seront plus tard converties en decimal(9,3) cours d'un process d'import, certaines données sont cohérentes avec des valeurs numériques normales comme 134.630, -80.662 et 324.372 . Parfois, j'ai des données avec plusieurs points pour les valeurs numériques telles que 1.324.372 and -2.134.630. Y at-il un moyen de supprimer ce point supplémentaire.

 declare @yourtable table(cash varchar(20)) insert @yourtable values('1.324.372') insert @yourtable values('-2.134.630') insert @yourtable values('1.234.567.89') 

Ancien code:

 select reverse(replace(replace(stuff(reverse(cash), charindex( '.', reverse(cash)), 1, ','), '.', ''), ',', '.')) from @yourtable 

Code légèrement mis à jour (le résultat est le même):

 select reverse(stuff(reverse(replace(cash, '.', '')), charindex('.', reverse(cash)), 1, '.')) from @yourtable 

Résultat:

 1324.372 -2134.630 1234567.89 

Vous pourriez;

 select case when len(cash) - len(replace(cash, '.', '')) > 1 then reverse(stuff(reverse(cash), charindex('.', reverse(cash)), 1, '')) else cash end from T 

Créez une vue qui inclut un champ calculé avec la valeur appropriée.

De cette façon, vous pouvez toujours voir la valeur varchar et la valeur décimale correspondante.

Quelque chose comme ça:

select [Espèces], cast (remplacez ([Cash], '.', '') comme décimal) comme [CashDecimal]
de ….