Mysql&Oracle中的日期
1、mysql中的日期
1.1、DATE_ADD(date, INTERVAL expr type)、DATE_SUB(date, INTERVAL expr type)
功能:函数向日期添加指定的时间间隔。
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
select now() 'now',
DATE_ADD(now(),INTERVAL 2 DAY) 'now+2day';
select STR_TO_DATE('20210228','%Y%m%d') 'day',
DATE_ADD(STR_TO_DATE('20210228','%Y%m%d'),INTERVAL 1 DAY) 'day+1day';
type 参数可以是下列值:
MICROSECOND,SECOND
秒,MINUTE
分,HOUR
时,DAY
, 天 WEEK,MONTH
月, QUARTER,YEAR
年, SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND, HOUR_MICROSECOND, HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR, YEAR_MONTH
select STR_TO_DATE('20210228','%Y%m%d') 'day',
DATE_SUB(STR_TO_DATE('20210228','%Y%m%d'),INTERVAL 1 DAY) 'day-1day',
DATE_SUB(STR_TO_DATE('20210228','%Y%m%d'),INTERVAL 2 MONTH) 'month-2month';
select
now() 'now',
DATE_ADD(now(),INTERVAL -3 MONTH) 'now-3month',
DATE_ADD(DATE_ADD(now(),INTERVAL -3 MONTH),INTERVAL -7 DAY) 'now-3month-7day';
select STR_TO_DATE('20210228','%Y%m%d') '年月日转日期',
DAY(STR_TO_DATE('20210228','%Y%m%d')) '获取当前天数',
DATE_ADD(STR_TO_DATE('20210228','%Y%m%d'),interval - DAY(STR_TO_DATE('20210228','%Y%m%d'))+1 DAY) '当月第一天+',
DATE_SUB(STR_TO_DATE('20210228','%Y%m%d'),interval DAY(STR_TO_DATE('20210228','%Y%m%d'))-1 DAY) '当月第一天-',
last_day(curdate()) '当月最后一天',
DATE_ADD(STR_TO_DATE('20210228','%Y%m%d'),INTERVAL 1 DAY) '当前日期+1天';
1.2、STR_TO_DATE(str,format)
功能:字符串 转 日期。
SELECT STR_TO_DATE('2021-07-18 16:20:30','%Y-%m-%d %H:%i:%s') AS result1,
STR_TO_DATE('2021-07-18 16:20:30','%Y-%m-%d') AS result2;
1.3、DATE_FORMAT(date,format)
功能:日期 转 字符串。
SELECT DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s') AS result1,
DATE_FORMAT(now(),'%Y-%m-%d') AS result2;
1.4、获取当前日期
select curdate(),now();
1.5、获取当月周第一天最后一天等
SELECT DATE_FORMAT( DATE_SUB( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 1 WEEK), '%Y-%m-%d 00:00:00') AS '上周一',
DATE_FORMAT( SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 1), '%Y-%m-%d 23:59:59') AS '上周末';
DATE_SUB( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 1 WEEK) AS '上周一(简)',
SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 1) AS '上周末(简)',
STR_TO_DATE('20231128','%Y%m%d') '年月日转日期',
DAY(STR_TO_DATE('20210228','%Y%m%d')) '获取当前天数',
DATE_ADD(STR_TO_DATE('20210228','%Y%m%d'),interval - DAY(STR_TO_DATE('20210228','%Y%m%d'))+1 DAY) '当月第一天+',
DATE_SUB(STR_TO_DATE('20210228','%Y%m%d'),interval DAY(STR_TO_DATE('20210228','%Y%m%d'))-1 DAY) '当月第一天-',
last_day(curdate()) '当月最后一天',
DATE_ADD(STR_TO_DATE('20210228','%Y%m%d'),INTERVAL 1 DAY) '当前日期+1天';
2、Oracle中的日期
2.1、日期加减法
SELECT SYSDATE "当前时间",
SYSDATE + INTERVAL '1' YEAR "加一年",
SYSDATE + INTERVAL '-1' YEAR "减一年",
SYSDATE + INTERVAL '1' MONTH "加一月",
SYSDATE + INTERVAL '1' DAY "加一天",
SYSDATE + INTERVAL '1' hour "加一小时",
SYSDATE + INTERVAL '1' minute "加一分钟",
SYSDATE + INTERVAL '1' SECOND "加一秒"
FROM dual;
![](https://img-blog.csdnimg.cn/59486bc8ab594957826ec2d5d4b36a1e.png)
2.2、日期月份第一天和最后一天
SELECT to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天",
to_char(last_day(sysdate), 'yyyy-mm-dd') "本月最后一天"
FROM dual;
![](https://img-blog.csdnimg.cn/e2348230e89447ef815152fe55d7998f.png)
2.3、trunc函数
--Oracle trunc()函数的用法
/**************日期********************/
SELECT trunc(SYSDATE) FROM dual; --2022/4/25 今天的日期为2022-4-25
SELECT trunc(SYSDATE, 'mm') FROM dual; --2022/4/1 返回当月第一天.
SELECT trunc(SYSDATE, 'yy') FROM dual; --2022/1/1 返回当年第一天
SELECT trunc(SYSDATE, 'dd') FROM dual; --2022/4/25 返回当前年月日
SELECT trunc(SYSDATE, 'yyyy') FROM dual; --2022/1/1 返回当年第一天
SELECT trunc(SYSDATE, 'd') FROM dual; --2022/4/24 (星期天)返回当前星期的第一天
SELECT trunc(SYSDATE, 'hh') FROM dual; --2022/4/25 16:00:00 当前时间为2022/4/25 16:23:26
SELECT trunc(SYSDATE, 'mi') FROM dual; --2022/4/25 16:23:00 TRUNC()函数没有秒的精确
/***************数字********************/
/*
TRUNC(number,num_digits)
Number 需要截尾取整的数字。
Num_digits 用于指定取整精度的数字。Num_digits 的默认值为0。
TRUNC()函数截取时不进行四舍五入
*/
SELECT trunc(123.458) FROM dual; --123
SELECT trunc(123.458, 0) FROM dual; --123
SELECT trunc(123.458, 1) FROM dual; --123.4
SELECT trunc(123.458, -1) FROM dual; --120
SELECT trunc(123.458, -4) FROM dual; --0
SELECT trunc(123.458, 4) FROM dual; --123.458
SELECT trunc(123) FROM dual; --123
SELECT trunc(123, 1) FROM dual; --123
SELECT trunc(123, -1) FROM dual; --120