2012-03-06 11 views
2

私はU123JASとP239BBのようなID(varchar2)のIDフィールドを持っています。私のクエリ中Oracle LIKEが返す(ORA01722)

私のようなフィルタを実行します。

ID LIKE ('U20Q%') //works perfectly. 

をしかし:私が行うとき:

ID LIKE ('U20%') //it fails 

のErrorCode

[Error Code: 1722, SQL State: 42000] ORA-01722: invalid number 

なぜ?

SOLUTION:

エラーが(tadaa)によって引き起こされた全く別の列にキャスト無効な番号。 エラーの原因となっていたDataRowは、2番目のようなエラーしか表示しませんでした。

は私の失敗のヘルプは、将来的に他の誰かが、あなたの助けありがとうございました:D

+1

あなたは1. IDが、これは失敗した実際のクエリビットであるVARCHAR2型および2であることを確認していますか?クエリ全体を投稿できますか? – Benoit

+0

IDはVarchar2であり、2つの例を切り替えると、最初のクエリで全体のクエリが機能しますが、2番目のクエリではクエリが機能します。 私は全体の質問を投稿できません、申し訳ありません。 @Benoit – Harry

+0

ドイツ語ページには、ORACLE TO_NUMBER関数があります。 https://oraculix.wordpress.com/2008/12/11/immer-wieder-ora-01722-invalid-number/ は可能でしょうか? – Harry

答えて

3

私は数変換は、クエリのどこかあると思います。エラーをトリガーする行はU20Qで始まるIDでなく、IDがU20で始まるため、最初のケースでは評価されません。

数値を変換する必要がある場合は、2番目のケースでは、失敗した行があります。

はこれを試してみてください:

SELECT * FROM dual WHERE 1 < dummy AND 1 = 0; /* works */ 

SELECT * FROM dual WHERE 1 < dummy AND 1 = 1; /* ORA-01722 */ 
+0

で動作しますが、ID LIKE' P20% 'はなぜ機能しますか? – Harry

+1

@ハリー:失敗した行にはU20で始まるIDが付いています(また、Qがない場合は次の文字) – Benoit

関連する問題