Извлечь значение из строки PostgreSQL - PullRequest
0 голосов
/ 08 сентября 2018

Простой вопрос

У меня есть следующий тип результатов в строковом поле

'Number=123456'
'Number=1234567'
'Number=12345678'

Как извлечь значение из строки с учетом того, что значение может изменяться в пределах 5-8 цифр

Пока что я это сделал, но сомневаюсь, что это соответствует моему требованию

SELECT substring('Size' from 8 for ....

Если бы я мог сказать, чтобы это начиналось со знака = до конца, это помогло бы!

Ответы [ 4 ]

0 голосов
/ 08 сентября 2018

Вы можете использовать regexp_matches:

with t(str) as
(
 select 'Number=123456'   union all 
 select 'Number=1234567'  union all
 select 'Number=12345678' union all
 select 'Number=12345678x9' 
)
select t.str  as "String", 
       regexp_matches(t.str, '=([A-Za-z0-9]+)', 'g')  as "Number"
  from t;

String            Number
--------------    ---------
Number=123456     123456
Number=1234567    1234567
Number=12345678   12345678
Number=12345678x9 12345678x9 
--> the last line shows only we look chars after equal sign even if non-digit

Rextester Demo

0 голосов
/ 08 сентября 2018

На основании этого вопроса: Разделить данные столбца через запятую на дополнительные столбцы

Возможно, вы могли бы сделать следующее:

SELECT *, split_part(col, '=', 2)
FROM table;
0 голосов
/ 08 сентября 2018

Другое простое решение, подходящее под ваши характеристики (обведите 7 ведущих символов), - right () :

right(str, -7)

Демо-версия:

SELECT str, right(str, -7)
FROM (
   VALUES ('Number=123456')
        , ('Number=1234567')
        , ('Number=12345678')
   ) t(str);

       str       |  right
-----------------+----------
 Number=123456   | 123456
 Number=1234567  | 1234567
 Number=12345678 | 12345678 
0 голосов
/ 08 сентября 2018

Вы можете использовать REPLACE:

SELECT col, REPLACE(col, 'Number=', '')
FROM tab;

Демоверсия DBFiddle

...