Как игнорировать нулевые значения в конце строки в Oracle? - PullRequest
1 голос
/ 15 апреля 2019

У меня есть столбец nse_credit_rating с типом данных VARCHAR2(18).Содержит значения вида 189.00-250.00.Но некоторые записи имеют нулевые значения в конце строки, т. Е. Даже если релевантные мне данные имеют длину 13 (189.00-250.00), но length(nse_credit_rating) возвращает 17 в качестве выходных данных, т.е. в конце есть 4 нулевых значения.

Основная проблема возникает, когда мне нужно использовать to_number для этого столбца, он возвращает «Недопустимый номер ORA-1722», поскольку он содержит ноль.

Есть ли способ получить подстроку до того, какпоявление значений NULL?Я даже взял вывод dump(nse_credit_rating).

SELECT dump(nse_credit_rating),nse_symbol 
FROM nse_security_master 
where nse_series='EQ'
  and nse_symbol like 'ARVIND' 
  and nse_series='EQ'

Вывод:

Typ=1 Len=17: 51,54,55,46,48,48,45,52,52,56,46,53,48,0,0,0,0

Здесь 0 - это ascii для NULL.

SELECT (nse_credit_rating),nse_symbol 
FROM nse_security_master 
where nse_series='EQ'
and nse_symbol like 'ARVIND' 
and nse_series='EQ'

Вывод:

367.00-448.50

Я пытался использовать ascii(substr(nse_credit_rating,-1,1)), но это работает только тогда, когда я знаю, что только один символ в конце будет нулевым.Но может быть любое количество символов, имеющих NULL.

Ответы [ 2 ]

4 голосов
/ 15 апреля 2019

Используйте rtrim() для удаления символов в конце строки:

SELECT rtrim(nse_credit_rating, chr(0)) as nse_credit_rating
      ,nse_symbol 
FROM nse_security_master 
where nse_series='EQ'
and nse_symbol like 'ARVIND' 
and nse_series='EQ'

Это описано в документации по Oracle SQL. Узнайте больше .Oracle также поддерживает стандартную функцию SQL trim(), но она более многословна:

SELECT trim(trailing chr(0) from nse_credit_rating) as nse_credit_rating
       , nse_symbol 
FROM nse_security_master 
where nse_series='EQ'
and nse_symbol like 'ARVIND' 
and nse_series='EQ'

Можете ли вы сказать мне, что здесь делает chr (0)?

chr() - это функция для преобразования чисел ASCII в символы.Так что chr(0) дает нам ASCII ноль.

0 голосов
/ 15 апреля 2019

Простой способ - использовать функцию обрезки.Подробную информацию можно получить по ссылке https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html

или напрямую rtrim .

...