1

次のクエリ (簡略化) には、整数にキャストする必要がある文字列がありますが、そのフィールドのすべてのエントリに値があるわけではありません。int へのキャスト/ケースは、ステートメントの選択部分では正常に機能しますが、where ステートメントでは失敗します。私は同僚を手伝っていますが、なぜこれがうまくいかないのか、空白を描き続けています。何かご意見は?

SELECT cast((case when item = ' ' then 0 else item end) as  int) as newNumber 
FROM tablename 
WHERE cast(trim(case when item = ' ' then 0 else item end) as INT) < 600

ここにエラーがあります

Invalid character found in a character string argument of the function DECFLOAT

エラーは、 WHEREステートメントが追加されたときにのみスローされます。

4

1 に答える 1

0
WITH
  Q1 (ITEM) AS
     (VALUES ' ', '1', '2', '3', 'DFSDF', '601'),
  Q2 (ITEM) AS
     (SELECT INTEGER(CASE WHEN ITEM = ' ' THEN '0' ELSE ITEM END) AS NEWNUMBER
        FROM Q1
        WHERE TRIM(TRANSLATE(ITEM, '', '0123456789')) = '')
SELECT *
  FROM Q2
  WHERE Q2.ITEM < 600
于 2012-09-21T17:25:41.577 に答える