DB2 根据字段的 5 个字符获取值

DB2 Get value based on 5 character of field

我正在使用一个设计非常糟糕的 table。我有一个名为可选字段的字段,出于某种原因,它已被用作不想正确创建 table 的人的包罗万象。

我需要查询这个 optional_fields 值并比较 optional_fields 中字符串的第五个值。

该字段的值类似于 NN14YN...N

我的查询类似于:

SELECT COMPANY_NUMBER
FROM table
WHERE fifth character of OPtional Fields = 'Y'

查看 DB2 中支持的 string functions(根据 DB2 for Linux UNIX 和 Windows 9.7.0 的文档)似乎可以使用 substr:

SELECT COMPANY_NUMBER
FROM table
WHERE substr(optional_Fields,5,1) = 'Y'

除了@jpw 的出色回答之外,如果您出于某种原因需要检查字符串中的多个位置(不幸的是,我不得不一次这样做),您可以使用 IN , 并反转 "normal" 顺序,如下所示:

...
WHERE 'Y' in (
     substr(t.flags_field, 123, 1)
    ,substr(t.flags_field, 19, 1)
    ,substr(t.flags_field, 128, 1)
    ,substr(t.flags_field, 1, 1) 
)

只是想我会分享。第一次用就惊艳到我了!