('2015-10-28 23:11:56', INTERVAL '-1 1:1:1' DAY_SECOND) -- 2015-10-27 22:10:55
?
5.日期比较
?
-- 计算2个日期间隔的天数
SELECT DATEDIFF('2015-10-28','2015-10-26') ?-- 结果2
-- 计算2个日期间隔的时分秒
SELECT TIMEDIFF('2015-10-28 23:11:56','2015-10-28 20:11:56') -- 结果 03:00:00
6.日期转化
?
?
-- 将日期转化为天数 (西元0年至今多少天)
SELECT TO_DAYS('2015-10-28 23:11:56') -- 结果 736264
SELECT TO_DAYS('0000-00-00 00:00:00') -- 结果 0
-- 将日期转化为秒数 (从'1970-01-01 00:00:00'GMT开始的秒数)
select UNIX_TIMESTAMP('2015-10-28 23:11:56') -- 结果 1446045116
?
-- 将时间转化为秒数
SELECT TIME_TO_SEC('01:00:05'); -- 结果 3605
-- 将秒数转化为日期
SELECT SEC_TO_TIME(3605); -- '01:00:05'
?
以上 ,参考资料:http://www.2cto.com/database/201202/118061.
html
?
注意问题
?
1. DATE_FORMAT
?
-- 错误示例
SELECT * FROM mytable WHERE create_date>=DATE_FORMAT(NOW(),'%Y-%m-%d')
-- 说明: DATE_FORMAT返回的是字符串,所以不能直接与日期字段比较,这个问题我工作中已经遇到过了
?
-- 解决办法 使用DATE,返回日期类型
SELECT * FROM mytable WHERE create_date>=DATE(NOW());
?
功能实现
?
-- 根据日期获取当月初与当月末
SET @DATE_B:=DATE(DATE_FORMAT('2015-10-28','%Y-%m-1'));
SET @DATE_E:=DATE_ADD(DATE_ADD(@DATE_B,INTERVAL 1 MONTH),INTERVAL -1 DAY);
SELECT @DATE_B,@DATE_E