Как проверить, что первые один или первые два или первые три символа в значении являются алфавитом - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть таблица со столбцом IDNumber, которая содержит либо все числовые, либо буквенно-цифровые символы, где либо первые, либо первые два, либо первые три символа являются алфавитом.Все, что я хочу сделать, удалить эти алфавиты из этого значения.

Обратите внимание, что база данных находится в SQL Server 2000.

Например:

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

Ответы [ 2 ]

6 голосов
/ 17 апреля 2019

Это должно делать то, что вы хотите в любой поддерживаемой версии 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)

или используя 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)
4 голосов
/ 17 апреля 2019

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

Result

...