Как преобразовать строку в int и вернуть 0, когда она равна нулю в Oracle Oracle - PullRequest
0 голосов
/ 18 января 2019

Я вычел 1 поле, которое является строкой, в 2 поля. Первое поле существует из 1-й серии чисел. Второе поле существует из всего, что идет после 1-й серии чисел.

Первое поле должно быть преобразовано в int. И второе поле, которое является строкой, должно давать 0, когда оно равно нулю.

Например:

95A3 будет int 95 и строка A3

242 C2 будет int 242 и строка C2

367 будет int 367 и 0

26 будет int 26 и 0

Вот такой у меня запрос:

select 
    REGEXP_SUBSTR(DATA, '\d+') NUMBERS, 
    REGEXP_SUBSTR(DATA, '[a-zA-Z].*.') EVERYTHINGAFTERNUMBERS
from DATAVIEW

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Oracle имеет две известные функции nvl для преобразования нулевого значения в фиксированное значение и to_number для преобразования строкового значения в числовое значение. Таким образом,

select to_number(NUMBERS) as numbers,
       nvl(EVERYTHINGAFTERNUMBERS,'0') as everythingafternumbers
  from
  (
    with DATAVIEW(DATA) as
    (
     select '95A3' from dual union all    
     select '242C2' from dual union all 
     select '367' from dual union all
     select '26' from dual   
    )
    select REGEXP_SUBSTR(DATA, '\d+') NUMBERS, 
           REGEXP_SUBSTR(DATA, '[a-zA-Z].*.') EVERYTHINGAFTERNUMBERS
      from DATAVIEW
   ) 

NUMBERS  EVERYTHINGAFTERNUMBERS
   95             A3
  242             C2
  367              0
   26              0

можно рассмотреть.

0 голосов
/ 18 января 2019

Вы бы сделали:

select cast(REGEXP_SUBSTR(DATA, '\d+') as int) as num, 
       coalesce(REGEXP_SUBSTR(DATA, '[a-zA-Z].*.'), '0') EVERYTHINGAFTERNUMBERS
from DATAVIEW;

Обратите внимание, что второй coalesce() возвращает '0', а не 0. Один столбец не может быть как строкой, так и числом.

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