简体   繁体   English

字母和数字排列的SQL匹配

[英]SQL match on letter and number arrangement

Is it possible to write an SQL statement which finds all rows which match a specific arrangement of letters/numbers? 是否可以编写一条SQL语句来查找与特定字母/数字排列匹配的所有行?

ie SELECT myCol FROM myTable WHERE myCol='<letter><letter><number>' SELECT myCol FROM myTable WHERE myCol='<letter><letter><number>'

Should return 12X and 34Y but not 123X or 34YY 应该返回12X和34Y,但不能返回123X或34YY

I am using MySQL. 我正在使用MySQL。

I haven't got MySQL on this machine to test but I think 我尚未在此机器上测试MySQL,但我认为

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

Should do it. 应该做。 ^ is an anchor for start of string, $ for end of string and the rest should be self explanatory. ^是字符串开头的锚点, $是字符串结尾的锚点,其余部分应该可以自我说明。

Looks like you could also use REGEXP '^[[:digit:]][[:digit:]][[:alpha:]]$' but completely untested and just going off the docs. 看起来您也可以使用REGEXP '^[[:digit:]][[:digit:]][[:alpha:]]$'但完全未经测试,只是退出了文档。

For sql server, you can use with PATINDEX . 对于sql server,可以与PATINDEX一起使用。 For mysql, you have REGEXP . 对于mysql,您具有REGEXP

EDIT : Damien_The_Unbeliever pointed out I was wrong and that PATINDEX does not support regular expressions. 编辑:Damien_The_Unbeliever指出我错了,并且PATINDEX不支持正则表达式。 That's correct but after some googling I found that you can use regular expressions in sql server because it hosts CLR. 没错,但是经过一番搜索之后,我发现您可以在sql server中使用正则表达式 ,因为它承载CLR。

Many database management systems support regular expressions. 许多数据库管理系统都支持正则表达式。 So, in PostgreSQL 9.x for example, you can do this . 因此,例如在PostgreSQL 9.x中,您可以执行此操作。 . .

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

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

And then 接着

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

And Oracle's version.. here it is: 和Oracle的版本..这里是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM