MySql 匹配纯数字、纯字母、按字母排序

原以为纯数字、纯字母是类似的正则[0-9]、[a-z]这样的,没想到不是。MySql有自己的匹配规则。

-- 纯数字
SELECT field1  FROM  tab WHERE field1 REGEXP  '^[[:digit:]]+$'; 
    
-- 匹配5位字符的纯数字
SELECT field1  FROM  tab WHERE field1 REGEXP  '^[[:digit:]]{5}$'; 
    
-- 纯字母
SELECT field1  FROM  tab WHERE field1 REGEXP  '^[[:alpha:]]+$'; 
    
-- 数字+字母。这里用了一个傻方法,先取字母数字再把纯字母和纯数字排除。
SELECT field1  FROM  tab WHERE field1 REGEXP  '^[[:alnum:]]+$'
AND field1 NOT REGEXP  '^[[:alpha:]]+$'
AND field1 NOT  REGEXP  '^[[:digit:]]+$';


这些匹配规则有张表:

Character Class Name(字符类名)Meaning(含义)
alnumAlphanumeric characters 字母数字
alphaAlphabetic characters 字母
blankWhitespace characters 空白字符
cntrlControl characters 控制字符
digitDigit characters 数字
graphGraphic characters 图形
lowerLowercase alphabetic characters 小写字母
printGraphic or space characters 图形或空格
punctPunctuation characters 标点符号
spaceSpace, tab, newline, and carriage return 空格、制表符,换行符,回车
upperUppercase alphabetic characters 大字字母
xdigitHexadecimal digit characters 十六进制数字



除了REEGEXP,LIKE还有些补充:

-- 匹配a开头长度为4个字符数据
SELECT field1 FROM  tab WHERE field1 LIKE 'a___'; 
    
-- 匹配第2、第4位为o,长度为5个字符的数据
SELECT field1 FROM  tab WHERE field1 LIKE  '_o_o_';

一个下划线代表一个字符,这点跟MSSQL(Sql Server)一样。



MySql除了有LIKE之外还有RLIKE

SELECT field1  FROM  tab WHERE field1 RLIKE  '^[[:digit:]]+$';

好吧,其实 RLIKE 跟 REGEXP 是一样的, 所以上面这行也是匹配纯数字。RLIKE主要是为了兼容mSQL(mini SQL)




排序:

MySql按字母升降序排序

SELECT field1  FROM  tab ORDER BY REGEXP '^[a-z]' DESC; -- 按字母升序
SELECT field1  FROM  tab ORDER BY REGEXP '^[a-z]' ASC; -- 按字母降序

这里比较有趣,是相反的,DESC出来的结果是a-z升序,ASC出来的是降序。



如果是直接ORDER BY 字段 ASC,则以数字开头的会排在前面,排完再排字母开头的,如:

SELECT field1  FROM  tab ORDER BY field1 ASC;

结果:

0abc

11cde

12sss

...

aaaaa

abbbb

zzzzzz



而ORDER BY 字段 DESC 则会先按字母z开始排序,最后排数字开头的,如:

SELECT field1 FROM  tab ORDER BY field1 DESC;

结果:

zzzzzz

abbbb

aaaaa

...

12cde

11sss

0abc



MySql正则使用,更多请参考MySql手册(同时可能需要注意下版本号):http://dev.mysql.com/doc/refman/5.5/en/regexp.html


类别:数据库   阅读(0)   评论(0)    发表时间:2015-10-10 21:32  星期六

评论区

发表评论

        姓名:
邮箱|网站:
        内容:

  (可按Ctrl+Enter提交)