SQL: извлекать числа из строковых полей - PullRequest
0 голосов
/ 18 июня 2020

Отчет для клиентов с несколькими условиями.
Результат должен содержать 'upper_income_level' - верхний предел столбца 'cust_income_level'. Поле

'cust_income_level' имеет, например, аналогичное содержание: ‘G: 130,000 - 149,999’ . Как извлечь только 149999 и преобразовать в целое число?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Если вам нужны числа в конце строки, вы можете использовать:

select replace(regexp_substr(cust_income_level, '[0-9,]+$'), ',', '')
0 голосов
/ 18 июня 2020

Без регулярных выражений вы можете использовать

substr( cust_income_level, instr( cust_income_level, '-') + 2 ) as cust_income_level

Если вы хотите использовать его как numeri c в ORDER BY, вы можете использовать функцию TO_NUMBER (), но это подвержено ошибкам, поскольку вы будут возникать ошибки, если значение не является фактическим числовым значением.

to_number( substr( cust_income_level, instr( cust_income_level, '-') + 2 )) as cust_income_level

Вместо этого для ORDER BY вы можете добавить начальные нули и использовать это значение для получения правильного порядка. Если есть значение, которое не является числом, оно будет представлено в результатах, но, по крайней мере, вы не получите ошибку.

lpad( substr( cust_income_level, instr( cust_income_level, '-') + 2 ), 9, '0')

В приведенном выше примере добавляются ведущие нули, пока значение не станет равным Длина 9 символов

  • '3' становится '000000003'
  • '40 'становится' 000000040 '
  • et c.

Сортировка приведенных выше результатов приведет к правильному порядку чисел в типе данных varchar2.

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