Oracle-Trim и Leading 0



Привет, ребята – мне нужна ваша помощь с нижеприведенной строкой кода. В настоящее время работает над базой данных Oracle.

THEN TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM s.sales_number))),6))

Приведенная выше строка кода очистит ведущие нули и получит последние 9 цифр номера продаж, но почему-то не работает для некоторых записей, ниже приведен пример данных

Data                expected 
0057889123995683    123995683 this is okay, it is what I expected
0000000300043467    for this I get 3467 but I expect to see is this 800043467

Как я могу изменить код, чтобы он работал должным образом?

Большое Спасибо.

171   2  

2 ответов:

Вы неправильно используете substr() для получения последних 9 цифр. Вместо этого вы должны передать -9 в качестве аргумента в substr(). Вы получаете правильный результат с 0057889123995683 только потому, что он имеет только два конечных нуля.

После небольшой игры с вашим кодом, это сработало для меня:

select TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM '0000000300043467'))),-9)) from dual

Измените код на:

THEN TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM s.sales_number))),-9))
Однако этот подход не будет работать, если после удаления ведущих нулей число цифр будет меньше 9. Чтобы решить эту проблему, сначала удалите ведущие нули, а затем вызовите substr(), Если длина больше 9 (используя оператор IF):
trimmed := TRIM(LEADING 0 FROM s.sales_number);

IF LENGTH(trimmed) > 9 THEN
 trimmed := substr(trimmed,-9);
END IF;

Как указал @Ben, TRIM() неявно преобразуется в символ, после этого нет необходимости преобразовываться в символ.

Пожалуйста, попробуйте выполнить это.

THEN TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM s.sales_number))),0))

Это сработало для меня.

    Ничего не найдено.

Добавить ответ:
Отменить.