Относительно вашего решения EDIT 2:
SELECT *
FROM (SELECT 'afr923zs' MyString FROM SYSIBM.SYSDUMMY1) T
WHERE substr(MyString,1,1) = 'a'
AND substr(MyString,2,1) IN ('a','o','f','d','m','e','p')
AND substr(MyString,3,1) BETWEEN 'a' AND 'z'
AND (substr(MyString,4,1) BETWEEN 'a' AND 'z' OR substr(MyString,4,1) BETWEEN '0' AND '9')
AND (substr(MyString,5,1) BETWEEN 'a' AND 'z' OR substr(MyString,5,1) BETWEEN '0' AND '9')
AND (substr(MyString,6,1) BETWEEN 'a' AND 'z' OR substr(MyString,6,1) BETWEEN '0' AND '9')
AND (substr(MyString,7,1) BETWEEN 'a' AND 'z' OR substr(MyString,7,1) BETWEEN '0' AND '9')
AND substr(MyString,8,1) IN ('s','i','d','b','f','k','p','o')
;
Вы можете рассмотреть возможность использования оператора LIKE, если у вас длинный список символов или если у вас несколько диапазонов. Это может сократить и упростить код:
SELECT *
FROM (SELECT 'afr923zs' MyString FROM SYSIBM.SYSDUMMY1) T
WHERE substr(MyString,1,1) = 'a'
AND 'aofdmep' like '%'||substr(MyString,2,1)||'%'
AND substr(MyString,3,1) BETWEEN 'a' AND 'z'
AND 'abcdefghijklmnopqrstuvwxyz0123456789' like '%'||substr(MyString,4,1)||'%'
AND 'abcdefghijklmnopqrstuvwxyz0123456789' like '%'||substr(MyString,5,1)||'%'
AND 'abcdefghijklmnopqrstuvwxyz0123456789' like '%'||substr(MyString,6,1)||'%'
AND 'abcdefghijklmnopqrstuvwxyz0123456789' like '%'||substr(MyString,7,1)||'%'
AND 'sidbfkpo' like '%'||substr(MyString,8,1)||'%'
;
Для повторяющихся списков символов вы можете использовать константу столбца CROSS JOINed:
SELECT *
FROM (SELECT 'afr923zs' MyString FROM SYSIBM.SYSDUMMY1) T
CROSS JOIN (SELECT 'abcdefghijklmnopqrstuvwxyz0123456789' alphanum FROM SYSIBM.SYSDUMMY1) T2
WHERE substr(MyString,1,1) = 'a'
AND 'aofdmep' like '%'||substr(MyString,2,1)||'%'
AND substr(MyString,3,1) BETWEEN 'a' AND 'z'
AND alphanum like '%'||substr(MyString,4,1)||'%'
AND alphanum like '%'||substr(MyString,5,1)||'%'
AND alphanum like '%'||substr(MyString,6,1)||'%'
AND alphanum like '%'||substr(MyString,7,1)||'%'
AND 'sidbfkpo' like '%'||substr(MyString,8,1)||'%'
;
Не требуется для вашего примера, но таблица CROSS JOINed может определять несколько столбцов именованных классов символов.