首页 > 解决方案 > 如何使用正则表达式获取表中列行的子字符串

问题描述

我正在尝试压缩描述列以仅显示 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;

但是,子字符串不会提取任何内容。谁能帮助解释为什么这不起作用?

标签: sqlregexpostgresqlsubstring

解决方案


看起来你只需要让你的搜索不区分大小写。为此,您可以使用选项i(nsensitive) 作为前缀:

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')
描述 | 迷你DESC      
:------------------------------------------------ ---------------------- | :-------------
1 包(FLEXITANK)基础油淡色 2000(统一代码:270799)| ANK) 基础油

您可能还需要考虑以下正则表达式,它为您提供前后的单词'base'- 一个被定义为字母数字字符加上下划线字符 ( _) 的单词:

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

对于您的示例数据,这会产生:

FLEXITANK) BASE OIL

推荐阅读