下应在几个不同系统的工作:
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意味着第一个位置的格式是一个字符,所有随后的位置是数字,如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查询,因为甲骨文似乎并不支持在LIKE子句括号标记:
SELECT *
FROM TheTable
WHERE REGEXP_LIKE(Data, '^[A-za-z]\d{4,}$')
这是扩大GBN在他的回答做,但这些版本允许在不变化的字符串长度OR条件。
编辑:已更新为支持SQL Server和Oracle中用于确保格式A0 +的示例,以便A1324,A2342388和P2342匹配,但A2342JUNK和A234不匹配。
Oracle REGEXP_LIKE代码是从Mark的帖子中借用的,但已更新为支持4位或更多的数字。
添加了实现这些技术的自定义SQL Server 2008方法。
Riann:增加了一个SQL Server 2008的功能,你可以使用,如果你需要它。 –