首页 > 解决方案 > 如何检查值中的前一个或前两个或前三个字符是字母

问题描述

我有一个 IDNumber 列的表,其中包含所有数字或字母数字,其中第一个或前两个或前三个字符是字母。我想做的就是从该值中删除这些字母。

请注意,数据库位于 SQL Server 2000 中。

例如:

1430112345679 (This is OK)
PO02456977785 (Remove first two letters)
C035343542654 (Remove first letter)
QPD1236548    (Remove first three letters)

标签: sqlsql-servertsqlsql-server-2000

解决方案


这应该在任何受支持的 SQL Server 版本中执行您想要的操作:

select idNumber, stuff(idNumber, 1, patindex('%[0-9]%', idNumber) - 1, '')

是一个 db<>fiddle。

在长期不受支持的 SQL Server 2000 中,您可以做一些更暴力的事情:

select (case when idNumber like '[0-9]%' then idNumber
             when idNumber like '_[0-9]%' then substring(idNumber, 2, len(idNumber))
             when idNumber like '__[0-9]%' then substring(idNumber, 3, len(idNumber))
             when idNumber like '___[0-9]%' then substring(idNumber, 4, len(idNumber))
             . . . -- however many clauses you need
        end)

或使用LIKE

select (case when left(idNumber, 1) between '0' and '9' then idNumber
             when substring(idNumber, 2, 1) between '0' and '9'
             then substring(idNumber, 2, len(idNumber))
             when substring(idNumber, 3, 1) between '0' and '9'
             then substring(idNumber, 3, len(idNumber))
             when substring(idNumber, 4, 1) between '0' and '9'
             then substring(idNumber, 4, len(idNumber))
             . . . -- however many clauses you need
        end)

推荐阅读