0

次のようなデータセットがあります。

A6177PE
A85506
A51SAIO
A7918F
A810004
A11483ON
A5579B
A89903
A104F
A9982
A8574
A8700F

そして、数字以外のすべてのエンディングを見つける必要があります。この例では、PE、AIO、F、ON、B、および F を意味します。

疑似コードでは、次のようなものが必要だと想像しています

SELECT DISTINCT X FROM 
  (SELECT SUBSTR(COL,[SOME_CLEVER_LOGIC]) AS X FROM TABLE);

何か案は?正規表現を学ばずにこれを解決できますか?

編集:明確にするために、私のデータセットはこの例よりもはるかに大きいです。また、数値部分の後の文字列の部分にのみ興味があります。文字列が「A6177PE」の場合、「PE」が必要です。

4

3 に答える 3

3

免責事項:私はOracleSQLを知りません。しかし、私はこのようなものがうまくいくはずだと思います:

SELECT DISTINCT X FROM 
  (SELECT SUBSTR(COL,REGEXP_INSTR(COL, "[[:ALPHA:]]+$")) AS X FROM TABLE);

REGEXP_INSTR(COL、 "[[:ALPHA:]] + $")は、フィールドの最後にある最初の文字の位置を返す必要があります。

于 2012-10-26T09:35:12.587 に答える
2

読みやすくするために、 REGEXP_SUBSTR関数を使用することをお勧めします (もちろん、これは受け入れられているソリューションよりも明らかに遅いため、パフォーマンスの問題がない場合)。

...これも REGEXP_INSTR に似ていますが、部分文字列の位置を返す代わりに、部分文字列自体を返します

SELECT DISTINCT SUBSTR(MY_COLUMN,REGEXP_SUBSTR("[a-zA-Z]+$")) FROM MY_TABLE;

(@Audun が書いたように、:alpha: もサポートされています)

また役に立つ: Oracle Regexp Support (最初のページ)

于 2012-10-26T09:35:31.967 に答える
1

例えば

SELECT SUBSTR(col,INSTR(TRANSLATE(col,'A0123456789','A..........'),'.',-1)+1)
  FROM table;
于 2012-10-26T09:30:50.120 に答える