Как получить подстроку строк столбцов в таблице с помощью регулярного выражения - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь сжать столбец описания, чтобы отображать только важную информацию в Postgresql. Я придумал это:

select description, substring(description from '.{0,5}base.{0,5}') as minidesc
from cbp.export_final
where product_code in ('LU016', 'LU017', 'LU018', 'LU019', 'LU020')
limit 1000;

Однако с подстрокой ничего не извлекается. Может кто-нибудь помочь объяснить, почему это не работает?

1 Ответ

0 голосов
/ 13 января 2020

Похоже, вам нужно сделать поиск нечувствительным к регистру. Для этого вы можете добавить префикс с параметром i (без учета чувствительности):

substring(description from '(?i).{0,5}base.{0,5}') as minidesc

Демонстрация на DB Fiddle :

with export_final as (
    select 
        '1 PACKAGE(S) OF (FLEXITANK) BASE OIL PALE 2000 (HARMONIZED CODE: 270799)' description,
        'LU016' product_code
)
select description, substring(description from '(?i).{0,5}base.{0,5}') as minidesc
from export_final
where product_code in ('LU016', 'LU017', 'LU018', 'LU019', 'LU020')
description                                                              | minidesc      
:----------------------------------------------------------------------- | :-------------
1 PACKAGE(S) OF (FLEXITANK) BASE OIL PALE 2000 (HARMONIZED CODE: 270799) | ANK) BASE OIL 

Возможно, вы также захотите рассмотреть следующее регулярное выражение, которое дает вам слово после и до 'base' - слово, определяемое как символы алфавита c плюс знак подчеркивания (_):

(?i)\w+\W+base\W+\w+

Для ваших данных выборки это дает:

FLEXITANK) BASE OIL
...