OracleテーブルからIDを取得しようとしています。 TN0001234567890345
のようなものです。私が欲しいのは、右端の10の位置に従って値をソートすることです(例:4567890345
)。 Oracle 11gを使用しています。 Oracle SQLの右端の10桁をカットする機能はありますか?
前もって感謝します
ティスモン
codaddictのソリューションは、文字列が少なくともトリミングされる長さと同じであることがわかっている場合に機能します。ただし、短い文字列を使用できる場合(たとえば、最後の10文字にトリミングし、トリミングする文字列の1つが「abc」である場合)、nullが返されます。
したがって、ここにあるのは、長さに関係なく、右端の10文字が存在する限り、わずかに変更されたバージョンです。
select substr(colName, -least(length(colName), 10)) from tableName;
より退屈ですが、それを行う別の方法。以下に示すように、REVERSE
およびSUBSTR
関数を使用します。
SELECT REVERSE(SUBSTR(REVERSE('TN0001234567890345'), 1, 10)) FROM DUAL;
最初のREVERSE関数は、文字列5430987654321000NT
を返します。
SUBSTR
関数は、新しい文字列5430987654321000NT
を最初の文字から10番目の文字まで読み取り、5430987654を返します。
最後のREVERSE
関数は、元の文字列から最初の8文字を引いたものを返します。つまり、4567890345
ええ、これは古い投稿ですが、誰かが何らかの理由で編集したためにリストに表示され、正規表現ソリューションが含まれていないことにI然としました!したがって、無益性の演習のために、regex_substrをorder by句で使用するソリューションを次に示します。正規表現は、文字列の最後の10文字を調べます。
with tbl(str) as (
select 'TN0001239567890345' from dual union
select 'TN0001234567890345' from dual
)
select str
from tbl
order by to_number(regexp_substr(str, '.{10}$'));
文字列のID部分は少なくとも10桁であると仮定されます。