1

すべての数値を含む列として宣言されたテーブルの列があります。以下のクエリを実行しようとすると、変換エラーが発生しますUSRDEF05 varchar(30)SOP10106

Select 
    DETAIL.SUBTOTAL as Sub_Total,
    CASE 
       when USERDEF.USRDEF05 <> ' ' THEN USERDEF.USRDEF05 
       ELSE 0 
    END as Winsys
FROM 
    SOP10100 DETAIL
Right JOIN 
    SOP10106 USERDEF ON USERDEF.soptype = DETAIL.soptype 
WHERE 
    BACHNUMB ='WINSYS112012' 

このエラーを解決する方法を誰か教えてもらえますか?

4

4 に答える 4

0

データベーススキーマが正しくないため(数値はテキストとして保存されないはずです)、次の誤ったステートメントも機能するはずです。

Select 
    DETAIL.SUBTOTAL as Sub_Total,
    CASE 
       when USERDEF.USRDEF05 <> ' ' THEN USERDEF.USRDEF05 
       ELSE '0' 
    END as Winsys
于 2012-12-04T08:05:29.237 に答える
0

問題はこの値 1,409.32 にはないと思います。ISNUMERIC()関数を使用してこのクエリを実行してみてください。

Select 
    DETAIL.SUBTOTAL as Sub_Total,
    CASE 
       when isnumeric(USERDEF.USRDEF05) = 1 
            THEN cast(USERDEF.USRDEF05 as decimal(12,2))
       ELSE 0 
    END as Winsys
FROM 
    SOP10100 DETAIL
Right JOIN 
    SOP10106 USERDEF ON USERDEF.soptype = DETAIL.soptype 
WHERE 
    BACHNUMB ='WINSYS112012'

また、エラーがどこにあるかを確認します。

select USRDEF05 from USERDEF 
where isnumeric(USERDEF.USRDEF05) = 0 
and USERDEF.USRDEF05 <> ' '
于 2012-12-04T08:17:20.757 に答える
0

これを試して -

CASE when ISNUMERIC(USERDEF.USRDEF05) <> 0 THEN 
CAST(CAST(USERDEF.USRDEF05 as DECIMAL) as int) ELSE 0 END as Winsys

注:- これにより、10 進数値が最も近い整数に丸められます。

例:- 値が 1409.32 の場合、結果の int 値は 1409 です。

値が 1409.64 の場合、結果の int 値は 1410 です

于 2012-12-04T07:47:07.850 に答える
0

文字列であるため、受信しようとしているものは本当にありませんが、数値になることUSRDEF05を望んでいるようです。Winsys

以下にいくつかの方法を示します。

Winsys文字列です

Select 
DETAIL.SUBTOTAL as Sub_Total,
CASE 
   when USERDEF.USRDEF05 <> ' ' THEN USERDEF.USRDEF05 
   ELSE '0' 
END as Winsys

Winsys数値です

Select 
DETAIL.SUBTOTAL as Sub_Total,
CASE 
   when USERDEF.USRDEF05 <> ' ' THEN CONVERT(MONEY, USERDEF.USRDEF05, 1)
   ELSE 0 
END as Winsys
于 2012-12-04T08:08:37.683 に答える