1

Oracleには、次のような文字列を持つことができる列(X)を持つテーブルがあります。

97M
481
101X8821E など
_
_

x> 90の整数値を持つ行だけを選択したいと思います。この例では、値97M、101X、および481を含む行を取得することを期待しています。これを行うにはどうすればよいですか。

4

3 に答える 3

6

使用する前にREGEXP_REPLACEを使用して英字を削除し、TO_NUMBER必要に応じて結果をフィルタリングできるようにしました。

WITH t
  AS (SELECT '97F' AS x FROM DUAL
      UNION
      SELECT '481' FROM dual
      UNION
      SELECT '101A' FROM dual
      UNION
      SELECT '101A' FROM dual
      UNION
      SELECT '88' FROM dual
      UNION
      SELECT '21E' FROM dual)
SELECT x
  FROM t
 WHERE TO_NUMBER(regexp_replace(x, '[[:alpha:]]', '')) > 90;

X
101A
481
97F

それが役に立てば幸い...

于 2012-06-20T21:31:32.973 に答える
3

常にtranslateを使用して英字を削除できます。

TO_NUMBER(translate('90F', '1ABCDEFGHIJKLMNOPQRSTUFWXYZ', '1')) -- = 90

Translateは、2番目の引数の文字を3番目の引数の文字に1対1で変換します。

これは別の例です。

translate('ABCDEFG', 'ABC', 'XYZ') = 'XYZDEFG'

A -> X
B -> Y
C -> Z

さて、私の例を見ると

translate('90F', '1ABCDEFGHIJKLMNOPQRSTUFWXYZ', '1')

1 -> 1 (this is here because if that last argument is null, you'll get an empty string)
A -> ? there's nothing here, so oracle will translate it to nothing
B -> same as above
于 2012-06-20T21:37:40.927 に答える
0

次のことを試してみてください。

WHERE (substr(x, 1, 1) = '9' and substr(x, 2, 1) between '1' and '9'
      ) or
      (substr(x, 1, 1) between '1' and '9' and
       substr(x, 2, 1) between '0' and '9' and
       substr(x, 3, 1) between '0' and '9'
      )

これは少しブルートフォースです。文字列が91〜99で始まるかどうか、または最初の3桁が文字列であるかどうかを確認します。

于 2012-06-20T21:33:55.003 に答える