0

お金の値を含む既存の列を取得し、それらを使用して、小数である別の列に値を設定しようとしています。例として、お金の値として「8.65」がある場合、同じレコードに関連付けられた 10 進値/列を「8.6500000000」に設定しようとしています。私の場合、小数点以下 10 桁の精度が必要です。

これは私が試したコードで、何もできませんでした (エラーは発生せず、レコードを更新しませんでした):

SET abc_PaidDecimal = CAST(abc_PaidAmnt AS DECIMAL(16,10))
WHERE abc_PaidDecimal <> CAST(abc_PaidAmnt AS DECIMAL(16,10))
4

3 に答える 3

1

abc_PaidDecimalにNULLが含まれている場合、この動作が発生する可能性があります。NULLを他の値と比較することはできません。有効な比較は、ISNULLまたはISNOTNULLを使用することだけです。

or abc_PaidDecimal IS NULLだから、あなたのWHERE条項に追加してみてください

于 2012-09-07T02:44:08.847 に答える
0

明示的に money を decimal にキャストする必要はありません。暗黙的に変換され、decimal(16,10) として格納されます。

ただし、8.65 と 8.650000 を比較するには、両側を等しく扱いたくない場合に両側を varchar(26) にキャストし ます。

WHERE   CAST(abc_PaidDecimal AS VARCHAR(26)) <> CAST(abc_PaidAmnt AS VARCHAR(26))

DECLARE @v1 MONEY = 23.25
        ,@v2 DECIMAL(18,6)= 23.250000

SELECT @v1 , @v2
IF  @v1 = @v2
SELECT 'same value before cast'
ELSE 
SELECT 'different value before cast'

SELECT CAST(@v1 AS VARCHAR(26)) , CAST(@v2 AS VARCHAR(26))
IF  CAST(@v1 AS VARCHAR(26)) = CAST(@v2 AS VARCHAR(26))
SELECT 'same value after cast'
ELSE 
SELECT 'different value after cast'
于 2012-09-07T02:54:59.977 に答える
0

8.65 と 8.6500000000000 は同じ数値です。

また、1と00001は同じ数字です。したがって、あなたのwhere句で<>は、常にfalse. だから何も更新しない

この変換ですべてのフィールドを更新する場合は、Where句を削除します

于 2012-09-07T02:34:59.457 に答える