Функция Oracle length (), возвращающая неверное значение - PullRequest
2 голосов
/ 13 октября 2009

Я только что нашел ... Я не знаю, как бы я это назвал, но здесь идет речь:

SELECT part_num, 
       length(trim(part_num)) 
  FROM part_programs 
 WHERE rownum <= 10;

... Результаты:

PART_NUM        LENGTH(TRIM(PART_NUM))
--------------- ----------------------
THAB256         8
THA1256674      11
THA1256674GU    13
THA1257141      11
THA1257141FR    13
THA1257141FR1   14
THA1257141TD    13
THA2002013      11
THA2002013MI    13
THA2002013MI1   14

Возвращенное целое число из функции length () фактически возвращает 1 + realLength значений.

Я не уверен, с чего начать, кто-нибудь хочет пролить свет?

Ответы [ 2 ]

5 голосов
/ 13 октября 2009

Попробуйте посмотреть на детали поля, используя встроенную функцию DUMP

SELECT part_num,
       length(trim(part_num)),
       dump( trim( part_num ) )
  FROM part_programs  
 WHERE rownum <= 10;

Это вернет данные как

Typ=96 Len=6: 79,114,97,99,108,101

из этого запроса

SELECT dump( 'Oracle' ) from dual
3 голосов
/ 13 октября 2009

Возможно, у вас есть невидимый символ (например, CR) в конце тех part_nums, которые TRIM () не удаляет.

Просто предположение. : -)

Попробуйте заключить их в скобки с помощью '[' || part_num || ']' в поле выбора и посмотрите, заметили ли вы какие-либо дополнительные пробелы с обеих сторон поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...