【问题标题】:Filtering for alphanumeric pattern with variable length过滤具有可变长度的字母数字模式
【发布时间】:2020-10-16 20:38:36
【问题描述】:

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

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

  1. 最小长度为 16,最大长度为 31
  2. 以两个严格的字母字符 A-Z 开头
  3. 接下来的两个位置(3 和 4)是严格的数字 0-9
  4. 字符串的其余部分必须是字母 A-Z 0-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]%'
          )

【问题讨论】:

    标签: sql sql-server tsql alphanumeric


    【解决方案1】:

    您可以添加第二个 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
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多