2017-11-15 14 views
0

私はこの文字列 '5666,232343'を持っていますが、これをDecimalに変換する場合はcast('5666,232343' as decimal(7,5))を使用しますが、NULLの値を返します。 CASTで動作しない理由を知っていますかこの文字列を10進数に変換する方法

+0

これは5666,232343とどれくらいですか? – maSTAShuFu

+1

あなたはaで(カンマ)を置き換えようとしましたか? – Engin

+0

カンマを削除するかカンマをドットで置き換えてもう一度やり直してください –

答えて

0

5666.232343の値を保持できる小数点にキャストする必要があります。
DECIMAL(7,5)には、##。#####という形式の番号が使用できます。最大の数字は99.99999です。カンマを取り出して期間に置き換える必要があります。

SELECT CAST('5666.232343' as decimal(16,6)) AS [DecimalValue] 
+0

となるデータ型の問題がある場合は、この答えにコンマを置き換えてください。これは完全で最高です – Matt

1

問題はおそらくカンマです。いくつかのデータベースでは、機能のいくつかは国際的に敏感ではありません。したがって、試してみてください:

cast(replace('5666,232343', ',', '.') as decimal(7, 5)) 
0

Zorkolotが正しいです。使用した現在の精度と位取りは、提供した価値には十分ではありません。

あなたはSQL Server 2012のまたは以降を使用していて、あなたは、あなたがTRY_PARSE機能を使用して文化を設定することができ、値にカンマを維持したい場合。文を完了せずに赤いテキストを返す代わりに、エラーが発生した場合はNULLを返します。また、必要に応じて失敗したコンバージョンがゼロの値を返すようにすることで、ステートメントに基本的なエラー処理を追加することもできます。たとえば、次のように

これは私のエラー処理の修正と(現在はerroringされる)あなたの元のクエリです:

select coalesce(try_parse('5666,232343' as decimal(7,5) using 'en-GB'),'0') as [DecimalValue] 

これは上記と同じものがあるが、私はそのように小数の精度とスケールを改正しました値が正常に変換されます。

select coalesce(try_parse('5666,232343' as decimal(16,6) using 'en-GB'),'0') as [DecimalValue] 

これは、あなたが手動またはSQL関数を使用してREPLACEを実行するのを防ぐ必要があります。

関連する問題