Sql 如何检查值中的前一个、前两个或前三个字符是否为字母表

Sql 如何检查值中的前一个、前两个或前三个字符是否为字母表,sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,我有一个IDNumber列的表,它包含所有数字或字母数字,其中第一个或前两个或前三个字符是字母。我要做的就是从那个值中删除那个些字母 请注意,数据库位于SQL Server 2000中 例如: 1430112345679没问题 PO02456977785删除前两个字母 C0353442654删除第一个字母 QPD1236548删除前三个字母 在任何受支持的SQL Server版本中,这都应该满足您的要求: select idNumber, stuff(idNumber, 1, patindex(

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

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

例如:

1430112345679没问题 PO02456977785删除前两个字母 C0353442654删除第一个字母 QPD1236548删除前三个字母
在任何受支持的SQL Server版本中,这都应该满足您的要求:

select idNumber, stuff(idNumber, 1, patindex('%[0-9]%', idNumber) - 1, '')
他是一把小提琴

在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)
或使用类似:

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

@戈登·林诺夫。。。数据库是sql server 2000,它不支持stuff和patindex函数。是的,它支持。它们很古老,可以追溯到古代Sybase@SyedImranShah . . . 升级的时间是很多很多年前。这看起来很相似,这是一个适用于SQL Server 2000@CD VA程序员的问题。字母表的长度不准确。它们在每个记录中都不同。PATINDEX在使用2008年及更高版本的SSM时工作,但在使用SQL server 2000Nope的查询分析器时不工作,这是不可能的。只需使用SQL 2000查询分析器进行双重检查,即可正常工作。@Gordon Linoff非常感谢您。您的查询有效。
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