Mysql中时间加减和比较大小的方法

来源:互联网 发布:网络交换机与PLC通讯 编辑:程序博客网 时间:2024/05/16 18:33
在Oracle中使用时间函数to_date习惯了,在Oracle中时间的加减也非常简单,直接加减即可。在Mysql中时间的函数很多,非常自由。 
    在项目中经常用到的就是时间的加减。 
    比如60天前,Oracle中直接就是sysdate-60,Mysql中就不行。 
    对时间加减的函数是 
    加ADDDATE(),减SUBDATE(); 
    select SUBDATE(now(),interval 60 day); 60天前的时间 
     select ADDDATE(now(),interval 60 day); 60天后的时间 

   在Oracle中经常用到trunc(sysdate,'D'),截取到天或者到小时。 
   在Mysql中可以用date_format()来代替。返回的是时间格式的字符串,也是时间 
   在Mysql中只要符合时间格式的字符串就可以当做Date类型。 
   取今天时间到天, 
   mysql> select DATE_FORMAT(now(),'%Y%m%d'); 
+-----------------------------+ 
| DATE_FORMAT(now(),'%Y%m%d') | 
+-----------------------------+ 
| 20100611                    | 
+-----------------------------+ 
1 row in set (0.00 sec) 

取到小时。 
mysql> select DATE_FORMAT(now(),'%Y%m%d%H'); 
+-------------------------------+ 
| DATE_FORMAT(now(),'%Y%m%d%H') | 
+-------------------------------+ 
| 2010061121                    | 
+-------------------------------+ 
1 row in set (0.00 sec) 


Mysql中直接比较时间大小也是不能用>或< 
只能转换成数字来比较大小。 
如果比较天的大小,1号小于2号。需要转换成到现在为止的天数。用到的是to_days(), 
mysql> select to_days('20100602'); 
+---------------------+ 
| to_days('20100602') | 
+---------------------+ 
|              734290 | 
+---------------------+ 
1 row in set (0.00 sec) 

mysql> select to_days('20100603'); 
+---------------------+ 
| to_days('20100603') | 
+---------------------+ 
|              734291 | 
+---------------------+ 
1 row in set (0.00 sec) 


如果时间的比较很精确,精确到时秒分就需要转换成UNIX_TIMESTAMP,换算成毫秒值来比较大小。 
mysql> select UNIX_TIMESTAMP('201006021700'); 
+--------------------------------+ 
| UNIX_TIMESTAMP('201006021700') | 
+--------------------------------+ 
|                     1601921820 | 
+--------------------------------+ 
1 row in set (0.00 sec) 

mysql> select UNIX_TIMESTAMP('201006021800'); 
+--------------------------------+ 
| UNIX_TIMESTAMP('201006021800') | 
+--------------------------------+ 
|                     1601921880 | 
+--------------------------------+ 
1 row in set (0.00 sec) 
0 0
原创粉丝点击