如何检查值中的前一个或前两个或前三个字符是字母

Sye*_*hah 0 sql t-sql sql-server sql-server-2000

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

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

例如:

1430112345679 (This is OK)
PO02456977785 (Remove first two letters)
C035343542654 (Remove first letter)
QPD1236548    (Remove first three letters)
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

在任何受支持的SQL Server版本中,这应该可以完成您想要的工作:

select idNumber, stuff(idNumber, 1, patindex('%[0-9]%', idNumber) - 1, '')
Run Code Online (Sandbox Code Playgroud)

是db <>小提琴。

在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)
Run Code Online (Sandbox Code Playgroud)

或使用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)
Run Code Online (Sandbox Code Playgroud)