变长字母数字模式的sql过滤

luaexgnf  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(302)

我想在“iban”列中找到无效的iban代码
在我的案例中,有效iban的要求是:
最小长度16,最大长度31
以两个严格按字母顺序排列的字符a-z开头
接下来的两个位置(3和4)是严格的数字0-9
字符串的其余部分必须是数字a-z0-9,小写或大写无关紧要
第1)点到第3)点没有问题,但我不知道最后一个问题,因为它没有固定的长度。
我正在使用sql server。
到目前为止,我有一个疑问:

SELECT id, iban
FROM foo
WHERE NOT (
     LEN(iban) BETWEEN 16 AND 31
     AND iban LIKE '[A-Z][A-Z][0-9][0-9]%'
          )
b4qexyjb

b4qexyjb1#

你可以再加一个 LIKE Assert整个iban代码是字母数字的表达式:

SELECT id, iban
FROM foo
WHERE NOT (
    LEN(iban) BETWEEN 16 AND 31 AND        -- length 16-31
    iban LIKE '[A-Z][A-Z][0-9][0-9]%' AND  -- e.g. starts with AB12
    iban NOT LIKE '%[^A-Za-z0-9]%'         -- only alphanumeric
);

相关问题