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
Как я могу изменить код, чтобы он работал должным образом?
Большое Спасибо.
2 ответов:
Вы неправильно используете
substr()для получения последних 9 цифр. Вместо этого вы должны передать-9в качестве аргумента вsubstr(). Вы получаете правильный результат с0057889123995683только потому, что он имеет только два конечных нуля.После небольшой игры с вашим кодом, это сработало для меня:
select TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM '0000000300043467'))),-9)) from dualИзмените код на:
Однако этот подход не будет работать, если после удаления ведущих нулей число цифр будет меньше 9. Чтобы решить эту проблему, сначала удалите ведущие нули, а затем вызовитеTHEN TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM s.sales_number))),-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))Это сработало для меня.
Comments