在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')));