过滤可变长度的字母数字模式

Filtering for alphanumeric pattern with variable length

我想在“iban”列中查找无效的 IBAN 代码

就我而言,有效 IBAN 的要求是:

  1. 最小长度为 16,最大长度为 31
  2. 以两个严格的字母字符 A-Z 开头
  3. 接下来的两个位置(3 和 4)是严格的数字 0-9
  4. 字符串的其余部分必须是字母数字 A-Z 0-9,大小写无关紧要

第 1) 点到第 3) 点没有问题,但我不知道最后一个,因为它没有固定长度。

我正在使用 SQL 服务器。

到目前为止我有这个查询:

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

您可以添加第二个 LIKE 表达式,断言整个 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
);