Ответ 1
Вы можете использовать SUBSTR как:
select substr('TN0001234567890345',-10) from dual;
Вывод:
4567890345
Я пытаюсь получить идентификатор из таблицы оракула. Это что-то вроде TN0001234567890345
. Я хочу, чтобы сортировать значения в соответствии с правом наиболее 10 позиций (например, 4567890345
). Я использую Oracle 11g. Есть ли какая-нибудь функция для сокращения самых правых 10 мест в Oracle SQL?
Заранее спасибо
tismon
Вы можете использовать SUBSTR как:
select substr('TN0001234567890345',-10) from dual;
Вывод:
4567890345
Другой способ сделать это, хотя и более утомительно. Используйте функции REVERSE
и SUBSTR
, как показано ниже:
SELECT REVERSE(SUBSTR(REVERSE('TN0001234567890345'), 1, 10)) FROM DUAL;
Первая функция REVERSE вернет строку 5430987654321000NT
.
Функция SUBSTR
будет читать нашу новую строку 5430987654321000NT
от первого символа до десятого символа, который вернет 5430987654.
Последняя функция REVERSE
вернет исходную строку минус первые 8 символов, т.е. 4567890345
Да, это старое сообщение, но оно появилось в списке из-за того, что кто-то редактировал его по какой-то причине, и я был потрясен тем, что решение регулярного выражения не было включено! Итак, вот решение, использующее 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 цифр.