SELECTYEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE()),HOUR(CURTIME()),MINUTE(NOW()),SECOND(SYSDATE()) FROM DUAL;
1 2
SELECT MONTHNAME('2021-10-26'),DAYNAME('2021-10-26'),WEEKDAY('2021-10-26'),QUARTER(CURDATE()),WEEK(CURDATE()),DAYOFYEAR(NOW()),DAYOFMONTH(NOW()),DAYOFWEEK(NOW()) FROM DUAL;
4. 日期的操作函数
函数
用法
EXTRACT(type FROM date)
返回指定日期中特定的部分,type指定返回的值
EXTRACT(type FROM date)函数中type的取值与含义:
1 2
SELECTEXTRACT(MINUTEFROM NOW()),EXTRACT( WEEK FROM NOW()),EXTRACT( QUARTER FROM NOW()),EXTRACT(MINUTE_SECOND FROM NOW()) FROM DUAL;
SELECT DATE_ADD(NOW(), INTERVAL1DAY) AS col1,DATE_ADD('2021-10-21 23:32:12',INTERVAL 1SECOND) AS col2, ADDDATE('2021-10-21 23:32:12',INTERVAL1SECOND) AS col3, DATE_ADD('2021-10-21 23:32:12',INTERVAL'1_1' MINUTE_SECOND) AS col4, DATE_ADD(NOW(), INTERVAL-1YEAR) AS col5, #可以是负数 DATE_ADD(NOW(), INTERVAL'1_1' YEAR_MONTH) AS col6 #需要单引号 FROM DUAL;
1 2 3 4
SELECT DATE_SUB('2021-01-21',INTERVAL31DAY) AS col1, SUBDATE('2021-01-21',INTERVAL31DAY) AS col2, DATE_SUB('2021-01-21 02:01:01',INTERVAL'1 1' DAY_HOUR) AS col3 FROM DUAL;
第2组:
函数
用法
ADDTIME(time1,time2)
返回time1加上time2的时间。当time2为一个数字时,代表的是秒,可以为负数
SUBTIME(time1,time2)
返回time1减去time2后的时间。当time2为一个数字时,代表的是秒 ,可以为负数
DATEDIFF(date1,date2)
返回date1 - date2的日期间隔天数
TIMEDIFF(time1, time2)
返回time1 - time2的时间间隔
FROM_DAYS(N)
返回从0000年1月1日起,N天以后的日期
TO_DAYS(date)
返回日期date距离0000年1月1日的天数
LAST_DAY(date)
返回date所在月份的最后一天的日期
MAKEDATE(year,n)
针对给定年份与所在年份中的天数返回一个日期
MAKETIME(hour,minute,second)
将给定的小时、分钟和秒组合成时间并返回
PERIOD_ADD(time,n)
返回time加上n后的时间
举例:
1 2 3 4
SELECT ADDTIME(NOW(),20),SUBTIME(NOW(),30),SUBTIME(NOW(),'1:1:3'),DATEDIFF(NOW(),'2021-10-01'),TIMEDIFF(NOW(),'2021-10-25 22:10:10'),FROM_DAYS(366),TO_DAYS('0000-12-25'), LAST_DAY(NOW()),MAKEDATE(YEAR(NOW()),12),MAKETIME(10,21,23),PERIOD_ADD(20200101010101,10) FROM DUAL;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
SELECT ADDTIME(NOW(), 50);
SELECT ADDTIME(NOW(), '1:1:1');
SELECT SUBTIME(NOW(), '1:1:1');
SELECT SUBTIME(NOW(), '-1:-1:-1');
SELECT FROM_DAYS(366);
SELECT MAKEDATE(2020,1);
SELECT MAKEDATE(2020,32);
SELECT MAKETIME(1,1,1);
SELECT PERIOD_ADD(20200101010101,1);
SELECT TO_DAYS(NOW());
举例:查询 7 天内的新增用户数有多少?
1
SELECTCOUNT(*) as num FROM new_user WHERE TO_DAYS(NOW())-TO_DAYS(regist_time)<=7
7. 日期的格式化与解析
函数
用法
DATE_FORMAT(date,fmt)
按照字符串fmt格式化日期date值
TIME_FORMAT(time,fmt)
按照字符串fmt格式化时间time值
GET_FORMAT(date_type,format_type)
返回日期字符串的显示格式
STR_TO_DATE(str, fmt)
按照字符串fmt对str进行解析,解析为一个日期
上述非GET_FORMAT 函数中fmt参数常用的格式符:
格式符
说明
格式符
说明
%Y
4位数字表示年份
%y
表示两位数字表示年份
%M
月名表示月份(January,….)
%m
两位数字表示月份(01,02,03。。。)
%b
缩写的月名(Jan.,Feb.,….)
%c
数字表示月份(1,2,3,…)
%D
英文后缀表示月中的天数(1st,2nd,3rd,…)
%d
两位数字表示月中的天数(01,02…)
%e
数字形式表示月中的天数(1,2,3,4,5…..)
%H
两位数字表示小数,24小时制(01,02..)
%h和%I
两位数字表示小时,12小时制(01,02..)
%k
数字形式的小时,24小时制(1,2,3)
%l
数字形式表示小时,12小时制(1,2,3,4….)
%i
两位数字表示分钟(00,01,02)
%S和%s
两位数字表示秒(00,01,02…)
%w
以数字表示周中的天数(0=Sunday,1=Monday….)
%j
以3位数字表示年中的天数(001,002…)
%U
以数字表示年中的第几周,(1,2,3。。)其中Sunday为周中第一天
%W
一周中的星期名称(Sunday…)
%a
一周中的星期缩写(Sun.,Mon.,Tues.,..)
%u
以数字表示年中的第几周,(1,2,3。。)其中Monday为周中第一天
%T
24小时制
%r
12小时制
%p
AM或PM
%%
表示%
GET_FORMAT函数中date_type和format_type参数取值如下:
举例:
1
SELECT DATE_FORMAT(NOW(), '%H:%i:%s');
1 2 3 4 5 6 7 8
SELECT STR_TO_DATE('09/01/2009','%m/%d/%Y') FROM DUAL;
SELECT STR_TO_DATE('20140422154706','%Y%m%d%H%i%s') FROM DUAL;
SELECT STR_TO_DATE('2014-04-22 15:47:06','%Y-%m-%d %H:%i:%s') FROM DUAL;
1 2 3 4
SELECT GET_FORMAT(DATE, 'USA');
SELECT DATE_FORMAT(NOW(),GET_FORMAT(DATE,'USA')) FROM DUAL;
SELECT employee_id,12* salary * (1+ IFNULL(commission_pct,0)) FROM employees;
1 2 3 4 5 6
SELECT last_name, job_id, salary, CASE job_id WHEN'IT_PROG'THEN1.10*salary WHEN'ST_CLERK'THEN1.15*salary WHEN'SA_REP'THEN1.20*salary ELSE salary END "REVISED_SALARY" FROM employees;