1

ファイルをステージング テーブルにインポートしたところ、インポートによって varchar 型のすべての数値フィールドが作成されました。これらの数値フィールドは、最終的には数値 (28,6) として定義されたフィールドに移動する必要があり、ターゲットを変更することはできません。

私が抱えている問題は、少数のフィールドが小数点以下 6 桁を超えていることです。

各行の小数点以下の桁数をテストし、使用できるものだけを取得するという強引な方法が常にあります。問題に取り組むより良い方法を知っている人はいますか?

ありがとう。

4

3 に答える 3

0

T-SQL は、暗黙的または明示的な変換中に余分な小数点以下を自動的に丸めます...テストを行う必要はありません。

DECLARE
    @VarcharField VARCHAR(50),
    @NumericField NUMERIC(28,6)

SET @VarcharField = '123456789.123456789'
SET @NumericField = @VarcharField

PRINT @NumericField

-- OUTPUT
-- 123456789.123457
于 2012-12-06T20:05:30.093 に答える
0

誤解していない限り、入力値の小数点以下が 6 桁を超えていても問題ありません。

あなたはただ行うことができます:

select convert(decimal(28,6),'17897986056.1235246346')
于 2012-12-06T20:06:06.983 に答える
0

これらの行を除外しますか? そうでない場合は、単純に ROUND 関数 (http://msdn.microsoft.com/en-us/library/ms175003.aspx) を使用します。これにより、追加の数値を切り捨てたり、必要に応じて切り上げたりすることができます。

于 2012-12-06T20:07:17.710 に答える