mysq比較時間

在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 | 
+--------------------------------+ 

 

select agent_id from bss_sys_user where UNIX_TIMESTAMP(DATE_FORMAT(last_date,'%Y%m%d%h%i')) < UNIX_TIMESTAMP(DATE_FORMAT('2010-10-08','%Y%m%d'));

 

在兩個時間之間

select agent_id from bss_sys_user where UNIX_TIMESTAMP(DATE_FORMAT(last_date,'%Y%m%d%h%i')) > UNIX_TIMESTAMP(DATE_FORMAT('2010-10-08','%Y%m%d')) and EXISTS(select agent_id from bss_sys_user where UNIX_TIMESTAMP(DATE_FORMAT(last_date,'%Y%m%d%h%i')) > UNIX_TIMESTAMP(DATE_FORMAT('2010-12-08','%Y%m%d')));

發佈了38 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章