Улей извлечь числовое c значение из строки - PullRequest
0 голосов
/ 17 июня 2020

У меня есть таблица:

column1                         column2 
The first value is 200 gb        need to restart (2 times)
The 2nd value is 700 gb          need (optional) to restart (10 times)

Я пытаюсь получить значения numeri c из таблицы. Ожидаемый результат:

column1_numeric      column2_numeric 
200                   2
700                   10

Для столбца 1: я пытаюсь получить данные, используя: regexp_replace(column1, '[^0-9]', '') as column1_numeric;, но это не работает для второй строки и возвращает 2700

Для столбца 2: я пытаюсь как: regexp_replace(regexp_extract(column2,'\\((.*?)\\)'), '[^0-9]', '') as column2_numeric, но это также не работает для 2-й строки и возвращает нулевые значения

Любые предложения, пожалуйста?

Ответы [ 3 ]

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

Извлечь последнее число c значение из строки '(\\d+)([^0-9]*)$':

select 
      regexp_extract(column1,'(\\d+)([^0-9]*)$',1) as column1_numeric,
      regexp_extract(column2,'(\\d+)([^0-9]*)$',1) as column2_numeric
   ...

Он извлекает

column1_numeric      column2_numeric 
200                   2
700                   10

Также вместо [^0-9] (не di git ) вы можете использовать \\D, что немного короче:

'(\\d+)(\\D*)$'
0 голосов
/ 17 июня 2020

Попробуйте это
выберите REGEXP_REPLACE ('Первое значение - 200 ГБ', '[^ 0-9]', '')
Я получил результат как 200
Попробуйте следующее:
выберите REGEXP_REPLACE (substring ('2-е значение - 200 ГБ', - 6), '[^ 0-9]', '')

0 голосов
/ 17 июня 2020

Если вы используете приведенное ниже регулярное выражение, оно будет работать для обоих столбцов и извлекать только число из строки.

var numberPattern = /\d+/g;
'The first value is 200 gb'.match( numberPattern ).join('') // 200

'need to restart (2 times)'.match( numberPattern ).join('') // 2
...