0

次の値を持つ「説明」列を持つテーブルがあります。

  • OPTestMachine
  • OP手動テスト
  • OP1010

したがって、値を取得する select ステートメントは次のようになります。

SELECT description
  FROM operation;

数値「1010」(または substr() 基準に一致する任意の文字列) を抽出し、可能であれば「見つかった文字列」を整数に変換したいと考えています。

だから私はこれを思いついた:

SELECT to_number(substr(description, 3, 4))
  FROM operation
 WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', '')

結果は単純明快です: "1010"

それは私にとってかなりうまくいきます。

今、私にとって難しい部分: substr()-result を WHERE 句で使用したい

このようなもの:

 SELECT to_number(substr(description, 3, 4))
   FROM operation
  WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', '')
    AND substr(description, 3, 4) < 2000;

これを行うと、「無効な番号」というエラーが表示されます。サーバーがselectステートメントを解析する順序が原因だと思います。

あなたが何か助けを提供できれば、それは素晴らしいことです!!

4

2 に答える 2

0
 SELECT to_number(substr(description, 3, 4))
   FROM operation
  WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', '')
    AND to_number(substr(description, 3, 4)) < 2000;

2 番目の to_number は役に立ちますか?

そうでない場合は、次のようにします。

select to_number(x) from (
SELECT substr(description, 3, 4) x
       FROM operation
      WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', ''))
        WHERE to_number(x) < 2000;
于 2016-10-27T14:00:00.910 に答える