Следующее должно работать в нескольких разных системах:
SELECT *
FROM TheTable
WHERE Data LIKE '[A-Za-z][0-9][0-9][0-9][0-9]%'
AND Data NOT LIKE '% %'
Этот подход действительно соответствует P2343, P23423JUNK и другому подобному тексту, но требует, чтобы формат был A0000 *.
Теперь, если OP подразумевает, что формат 1-й позиции является символом, а все последующие позиции являются числовыми, как в A0 +, используйте следующее (в SQL Server и многих других системах баз данных):
SELECT *
FROM TheTable
WHERE SUBSTRING(Data, 1, 1) LIKE '[A-Za-z]'
AND SUBSTRING(Data, 2, LEN(Data) - 1) NOT LIKE '%[^0-9]%'
AND LEN(Data) >= 5
Чтобы включить это в функцию SQL Server 2008, поскольку это то, что вам больше всего нравится, вы можете написать:
CREATE FUNCTION ufn_IsProperFormat(@data VARCHAR(50))
RETURNS BIT
AS
BEGIN
RETURN
CASE
WHEN SUBSTRING(@Data, 1, 1) LIKE '[A-Za-z]'
AND SUBSTRING(@Data, 2, LEN(@Data) - 1) NOT LIKE '%[^0-9]%'
AND LEN(@Data) >= 5 THEN 1
ELSE 0
END
END
... и вызовите это так:
SELECT *
FROM TheTable
WHERE dbo.ufn_IsProperFormat(Data) = 1
... этот запрос необходимо изменить для запросов Oracle, поскольку Oracle не поддерживает скобочную запись в предложениях LIKE:
SELECT *
FROM TheTable
WHERE REGEXP_LIKE(Data, '^[A-za-z]\d{4,}$')
Это расширение, которое gbn делает в своем ответе, но эти версии допускают переменную длину строки без условий ИЛИ.
EDIT : Обновлено для поддержки примеров в SQL Server и Oracle для обеспечения формата A0 +, так что A1324, A2342388 и P2342 совпадают, а A2342JUNK и A234 - нет.
Код Oracle REGEXP_LIKE был заимствован из сообщения Марка, но обновлен для поддержки 4 или более числовых цифр.
Добавлен собственный подход SQL Server 2008, который реализует эти методы.