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

How to check that first one or first two or first three characters in a value is alphabet

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

请注意数据库在 SQL Server 2000 中。

例如:

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

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

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

Here 是一个 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)

PATINDEX 在 SQL Server 2000 中可用。使用它:

SELECT val, SUBSTRING(val, PATINDEX('%[0-9]%', val), LEN(val)) AS newval
FROM (
    SELECT '1430112345679' AS val UNION ALL
    SELECT 'PO02456977785' UNION ALL
    SELECT 'C035343542654' UNION ALL
    SELECT 'QPD1236548'
) AS x