SQL匹配字母和数字排列

时间:2011-02-18 14:16:55

标签: sql mysql

是否可以编写一个SQL语句,查找与特定字母/数字排列匹配的所有行?

即。 SELECT myCol FROM myTable WHERE myCol='<letter><letter><number>'

应该返回12X和34Y而不是123X或34YY

我正在使用MySQL。

4 个答案:

答案 0 :(得分:3)

我没有在这台机器上测试MySQL,但我认为

SELECT myCol 
FROM myTable 
WHERE myCol REGEXP '^[0-9][0-9][A-Z]$'

应该这样做。 ^是字符串开头的锚点,$表示字符串结尾,其余部分应该是自解释的。

看起来您也可以使用REGEXP '^[[:digit:]][[:digit:]][[:alpha:]]$',但完全未经测试,只是关闭了文档。

答案 1 :(得分:1)

对于sql server,您可以使用PATINDEX。对于mysql,您有REGEXP

编辑:Damien_The_Unbeliever指出我错了,PATINDEX不支持正则表达式。这是正确的,但经过一些谷歌搜索后,我发现你可以在SQL Server中use regular expressions,因为它托管了CLR。

答案 2 :(得分:1)

许多数据库管理系统都支持正则表达式。因此,在PostgreSQL 9.x中,您可以这样做。 。

create table mytable (
  mycol varchar(10) primary key
);

insert into mytable values 
('12X'),
('34Y'),
('123X'),
('34YY');

然后

select * 
from mytable
where mycol ~ ('^[0-9][0-9][A-Z]$');

答案 3 :(得分:1)

和甲骨文的版本......在这里:

SELECT myCol
  FROM myTable
 WHERE REGEXP_LIKE(myCol, '^\d{2}[A-Z]$')