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)
)
只是想我会分享。第一次用就惊艳到我了!
我正在使用一个设计非常糟糕的 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)
)
只是想我会分享。第一次用就惊艳到我了!