0

解析に使用している一時テーブルがあります#rp

#rpnvarchar(max)には、小数点以下2桁までの正と負の数値を保持する列が含まれます(#rp.col8例: `1234.26')。

次のクエリを実行して、変換された値のセットを取得できます。

select * from
(
    select CONVERT(decimal(18,2),rp.col8) as PARSEAMT
    from #rp

    where
    --#rp filtering criteria
)q  

ただし、PARSEAMT = 0次の方法でクエリを実行しようとすると、標準の「8114、データ型varcharから数値への変換エラー」が発生します。

select * from
(
    select CONVERT(decimal(18,2),col8) as PARSEAMT
    from #rp

    where
    --#rp filtering criteria
)q  
where q.PARSEAMT = 0

そのwhere句がないと、クエリは正常に実行され、期待値が生成されます。

where q.PARSEAMT = 0.00やなどの他の句も試しましwhere q.PARSEAMT = convert(decimal(18,2),0)た。

私の比較で何が間違っているのですか?

4

1 に答える 1

0

別のtemp-table/table-variableにPARSEAMTを選択することをお勧めしますが、コメントからすでにそれを行っていることがわかります。

興味深いことに、次の結果は何ですか?

select 
    col8
from
    #rp
where
    -- ISNUMERIC returns 1 when the input expression evaluates to a valid 
    -- numeric data type; otherwise it returns 0. Valid numeric data types 
    -- include the following:
    isnumeric(col8) <> 1 
于 2012-04-26T05:20:24.887 に答える