2

クエリの結果があり、「用語」と言う1つの列の最後の数字を取得することになっています

The value of column term can be like:
'term'     'number' (output)
---------------------------
xyz012         12
xyz112         112
xyz1           1
xyz02          2
xyz002         2
xyz88          88

注: 上記のシナリオに限定されませんが、最後の 3 文字以下の要件は数字にすることができます

私が使用した関数: to_number(substr(term.name,-3)) (最初は、最後の 3 文字が常に数字であるため、要件を想定していましたが、間違っていました)

最後の 3 桁が '012' の場合、番号は '12' である必要があるため、to_number を使用しています。

ORA-01722: 番号が無効です

substr または regexp_substr を使用してこれを達成するにはどうすればよいですか?

regexp_substr はあまり調べませんでした。

4

3 に答える 3

10

を使用してREGEXP_SUBSTR

select column_name, to_number(regexp_substr(column_name,'\d+$'))
 from table_name;
  • \d は数字に一致します。+とともに、1桁以上のグループになります。
  • $ は行末に一致します。
  • まとめると、この正規表現は文字列の末尾にある数字のグループを抽出します。

詳細はこちら

ここでデモ。

于 2013-07-30T11:15:57.937 に答える
1

Oracleには、regexp_instr()あなたが望むことをする機能があります:

select term, cast(substr(term, 1-regexp_instr(reverse(term),'[^0-9]')) as int) as number
于 2013-07-30T10:46:42.910 に答える