Ce qui suit devrait fonctionner dans quelques systèmes différents:
SELECT *
FROM TheTable
WHERE Data LIKE '[A-Za-z][0-9][0-9][0-9][0-9]%'
AND Data NOT LIKE '% %'
Cette approche fait correspondre P2343, P23423JUNK, et un autre texte similaire, mais exige que le format est A0000 *.
Maintenant, si l'OP implique un format de la 1ère position est un personnage et toutes les positions suivantes sont numériques, comme dans A0 +, puis utilisez les éléments suivants (dans SQL Server et beaucoup d'autres systèmes de base de données):
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
pour intégrer dans une fonction SQL Server 2008, puisque cela semble être ce que vous voulez plus, vous pouvez écrire:
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
... et appeler en elle comme ceci:
SELECT *
FROM TheTable
WHERE dbo.ufn_IsProperFormat(Data) = 1
...cette requête doit changer pour les requêtes Oracle car Oracle ne semble pas soutenir la notation crochets dans les clauses LIKE:
SELECT *
FROM TheTable
WHERE REGEXP_LIKE(Data, '^[A-za-z]\d{4,}$')
Ceci est le gbn d'expansion fait dans sa réponse, mais ces versions permettent de faire varier la longueur des chaînes sans OU conditions.
EDIT: Mise à jour pour soutenir des exemples dans SQL Server et Oracle pour assurer le format A0 +, de sorte que A1324, A2342388 et match P2342 mais A2342JUNK et A234 ne le font pas.
Le code Oracle REGEXP_LIKE a été emprunté à la publication de Mark, mais mis à jour pour prendre en charge au moins 4 chiffres numériques.
Ajout d'une approche SQL Server 2008 personnalisée qui implémente ces techniques.
Riann: ajouté un Fonction SQL Server 2008 que vous pouvez utiliser si vous en avez besoin. –