首页 > 解决方案 > 如何获取字符串中特定字符的所有位置索引?

问题描述

我正在使用 postgres 和 PgAdmin3。我被卡住了,我什至不知道从哪里开始!

我有一个具有以下格式的列:

tvd_unit
YYNNNNNNNNNNNNNYYNNNNN

该列包含 22 个职位,职位代表行为在特定业务单元中是否活跃,通过是或否(Y 或 N)

在上面的示例中,该参数仅在 1、2、16 和 17 单位中有效。其余的都关闭了,我需要开发一个查询来返回参数处于活动状态的每个单元数,在上面的示例中,我需要返回:

1, 2, 16, 17

老实说,我不知道如何开始获得单位数量,我需要帮助。

标签: sqlpostgresqlselect

解决方案


您可以使用 generate_series 和 substr 从字符串中获取每个元素:

with data as (select 'YYNNNNNNNNNNNNNYYNNNNN' as tvd_unit)
select position,
       substr(tvd_unit, position, 1) as active
FROM data, 
     generate_series(1, length(tvd_unit), 1) g(position)
WHERE substr(tvd_unit, position, 1) = 'Y';
 position | active
----------+--------
        1 | Y
        2 | Y
       16 | Y
       17 | Y
(4 rows)

推荐阅读