mysql 正则表达式

一、建立测试表:

  

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  `birth` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

二、通过内置函数完成字符串到日期的转化:
在mysql里面利用str_to_date()把字符串转换为日期。

MySQL内置函数实例:

分隔符一致,年月日要一致

  1. select str_to_date('02/25/1998 12:00:34 AM','%m/%d/%y %h:%i:%s %s') as column_name from table_name;  
  2.  
  3. str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09  
  4.  
  5. str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09  
  6.  
  7. str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09  
  8.  
  9. str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30  
  10.  
  11. str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30  
  12.  

三、基于正则表达式的实现:

-- 模糊查询  _ 匹配一个字符
 SELECT * FROM test WHERE NAME LIKE '_a%';
 
 /*
  使用正则表达式配置所用name中带有a 的人员信息,和like功能基本一样 
 */
 
 SELECT NAME ,id,age ,birth FROM test WHERE NAME REGEXP 'a';
 -- like的实现
  SELECT NAME ,id,age ,birth FROM test WHERE NAME LIKE '%a%';
  
  /*
   .配置任意字符 
  */
  
  SELECT NAME ,id,age ,birth FROM test WHERE age REGEXP '1.3';
 -- like的实现
  SELECT NAME ,id,age ,birth FROM test WHERE age LIKE '%1_3%';
  
  /*
     比较复杂的正则表达式实现,
     like和正则表达式都不区分大小写,只需要加上 binary 即可
  */
  
   SELECT NAME ,id,age ,birth FROM test WHERE NAME REGEXP 'J.tt.';
   -- 区分大小写的正则表达式,
   SELECT NAME ,id,age ,birth FROM test WHERE NAME  REGEXP BINARY 'J.tt.';
   SELECT NAME ,id,age ,birth FROM test WHERE NAME REGEXP 'J.tt.';
 -- like的实现
  SELECT NAME ,id,age ,birth FROM test WHERE NAME LIKE '%J_tt_%';
 --  区分大小写的like实现 
  SELECT NAME ,id,age ,birth FROM test WHERE NAME LIKE  BINARY '%j_tt_%';
  
/*
   使用复杂的正则表达式实现  
  */
  SELECT * FROM test WHERE age REGEXP '12|32';

 

/*
  [:digit:]匹配任意数字 ,{3}表示其前面必须出现的字符的个数,可以是4,5.。更多的位数
  意思是:匹配大于等于两位的数字
  */
  SELECT * FROM test WHERE age REGEXP '[[:digit:]]{2}';

 [:a;num:]    任意字母和数字(同 [a-zA-Z0-9])

[:alpha:]     任意字符(同 [a-zA-Z])

[:blank:]     空格和制表(同 [\\t])

[:cntrl:]       ASCII控制字符(ASCII 0到31和127)

[:digit:]       任意数字(同[0-9])

[:graph:]    与["print:] 相同,但不包括空格

[:lower:]      任意小写字线(同 [a-z])

[:print:]        任意可打印字符

[:punct:]      既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符

[space:]      包括空格在内的任意空白字符(同 [\\f\\n\\t\\r\\v])

[:upper:]     任意大小字母(同 [A-Z])

[:xdigit:]      任意十六进制数字(同 [a-fA-F0-9])

复制代码

 

 

匹配多个实例

复制代码
元字符 说明
* 0个或多个匹配
+ 1个或多个匹配(等于 {1, })
? 0个或1个匹配(等于 {0, 1})
{n} 指定数目的匹配
{n, } 不少于指定数目的匹配
{n ,m} 匹配数目的范围(m不超过255)
 
 

定位符

^ 文本的开始
$ 文本的末尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
posted @ 2015-01-07 11:10  snow__wolf  阅读(271)  评论(0)    收藏  举报