Как получить право на 10 мест в оракуле

Я пытаюсь получить идентификатор из таблицы оракула. Это что-то вроде TN0001234567890345. Я хочу, чтобы сортировать значения в соответствии с правом наиболее 10 позиций (например, 4567890345). Я использую Oracle 11g. Есть ли какая-нибудь функция для сокращения самых правых 10 мест в Oracle SQL?

Заранее спасибо

tismon

Ответы

Ответ 1

Вы можете использовать SUBSTR как:

select substr('TN0001234567890345',-10) from dual;

Вывод:

4567890345

Ответ 2

Другой способ сделать это, хотя и более утомительно. Используйте функции REVERSE и SUBSTR, как показано ниже:

SELECT REVERSE(SUBSTR(REVERSE('TN0001234567890345'), 1, 10)) FROM DUAL;

Первая функция REVERSE вернет строку 5430987654321000NT.

Функция SUBSTR будет читать нашу новую строку 5430987654321000NT от первого символа до десятого символа, который вернет 5430987654.

Последняя функция REVERSE вернет исходную строку минус первые 8 символов, т.е. 4567890345

Ответ 3

Да, это старое сообщение, но оно появилось в списке из-за того, что кто-то редактировал его по какой-то причине, и я был потрясен тем, что решение регулярного выражения не было включено! Итак, вот решение, использующее regex_substr в порядке заказа, просто для бесполезности упражнения. Регулярное выражение смотрит на последние 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}$'));

Предполагается, что идентификационная часть строки составляет не менее 10 цифр.