now([fsp]):返回系统当前的日期和时间(fsp指定小数秒的精度,取值0-6)。
1. select now();
2. select now(2); # 指定小数秒的精度
3. select now()+0; # now()+0显示格式是‘YYYYMMDDHHMMSS’
->
1. 2020-02-18 19:36:39
2. 2020-02-18 19:36:39.46
3. 20200218193639
sysdate([fsp]):返回系统当前的日期和时间,但一般用now()。
sysdate()返回的是函数执行时的时间。
now()返回的是语句执行时的时间。
1. select sysdate();
2. select now(),sleep(2),now();
3. select sysdate(),sleep(2),sysdate();
->
1. 2020-02-18 19:36:39
2. 2020-02-18 19:42:11 0 2020-02-18 19:42:11
3. 2020-02-18 19:42:13 0 2020-02-18 19:42:15
curdate():返回当前日期,只包含年月日。
1. select curdate();
2. select curdate()+2; # 当前日期加2天
->
1. 2020-02-18
2. 20200220
curtime([fsp]):返回当前时间,只包含时分秒(fsp指定小数秒的精度,取值0-6)。
1. select curtime();
2. select curtime(6);
3. select curtime()+2; # 加2秒
->
1. 19:49:39
2. 19:49:39.354219
3. 194941
datediff(expr1,expr2):返回两个日期相减的天数(expr1 - expr2)。
select datediff('2020-04-18 10:00:00','2010-02-18');
->
3712
timediff(expr1, expr2):返回两个时间相减的时间数(expr1 − expr2),两个参数类型必须相同。范围在-838:59:59到838:59:59。
timestampdiff(unit,begin,end):根据unit单位返回时间差。
1. select timediff('18:32:59','00:1:00');
2. select timediff('2020-02-18 10:00:00','10:00:00'); # 如果传递两个不同类型的参数,返回null
3. select timediff('2020-02-18 10:00:00','2020-02-15');
4. select timediff('2020-02-18 10:00:00',null);
5. select timediff('2020-04-18 10:00:00','2020-02-18 10:00:00'); # timediff函数返回的结果是一个time值,范围是从-838:59:59到838:59:59。当范围超过的时候,MySQL会截断结果。
6. select timestampdiff(hour,'2020-04-18 10:00:00','2020-02-18 10:00:00') # 解决范围超过截断的问题。
->
1. 18:31:59
2. null
3. null
4. null
5. 838:59:59
6. -1440
date_add(date,interval expr unit):返回给定日期(date)加上(add)一个时间单位(unit)的值(expr)。
1. select date_add('2020-02-18 10:00:00',interval 1 day); # 增加一天
2. select date_add('2020-02-18 10:00:00',interval 1 hour);
3. select date_add('2020-02-18 10:00:00',interval 1 second);
4. select date_add('2020-02-18 10:00:00',interval 1 microsecond); # 微秒
5. select date_add('2020-02-18 10:00:00',interval 1 year);
6. select date_add('2020-02-18 10:00:00',interval 1 month);
7. select date_add('2020-02-18 10:00:00',interval 1 day);
8. select date_add('2020-02-18 10:00:00',interval 1 week); # 一个星期,加7天
9. select date_add('2020-02-18 10:00:00',interval 1 quarter); # 1个季度,加3个月
->
1. 2020-02-19 10:00:00
2. 2020-02-18 11:00:00
3. 2020-02-18 10:00:01
4. 2020-02-18 10:00:000001
5. 2021-02-18 10:00:00
6. 2020-03-18 10:00:00
7. 2020-02-19 10:00:00
8. 2020-02-25 10:00:00
9. 2020-05-18 10:00:00
date_sub(date,interval expr unit):返回给定日期(date)减去(sub)一个时间单位(unit)的值(expr)。
1. select date_sub('2020-02-18',interval '1-1' year_month); # 年和月,减1年1个月
2. select date_sub('2020-02-18',interval '1 1' day_hour); # 日和小时,减1天1小时
3. select date_sub('2020-02-18',interval '1 0:1' day_minute); # 日和分钟,减1天1分钟
4. select date_sub('2020-02-18',interval '1 0:0:1' day_second); # 日和秒,减1天1秒
5. select date_sub('2020-02-18',interval '1:1' hour_minute); # 小时和分钟,减1小时1分钟
6. select date_sub('2020-02-18',interval '1:0:1' hour_second); # 小时和秒,减1小时1秒
7. select date_sub('2020-02-18',interval '1:1' minute_second); # 分钟和秒,减1分钟1秒,写0:1:1返回空值。
->
1. 2019-01-19
2. 2020-02-16 23:00:00
3. 2020-02-16 23:59:00
4. 2020-02-16 23:59:59
5. 2020-02-17 22:59:00
6. 2020-02-17 22:59:59
7. 2020-02-17 23:58:59
选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒。
1. select now(),date(now());
2. select now(),time(now());
3. select now(),year(now());
4. select now(),quarter(now());
5. select now(),month(now());
6. select now(),day(now());
7. select now(),hour(now());
8. select now(),minute(now());
9. select now(),second(now());
10.select now(),microsecond(now());
->
1. 2020-02-18 23:18:54 2020-02-18
2. 2020-02-18 23:18:54 23:18:54
3. 2020-02-18 23:18:54 2020
4. 2020-02-18 23:18:54 1
5. 2020-02-18 23:18:54 2
6. 2020-02-18 23:18:54 18
7. 2020-02-18 23:18:54 23
8. 2020-02-18 23:18:54 18
9. 2020-02-18 23:18:54 54
10.2020-02-18 23:18:54 0
EXTRACT(unit FROM date):从日期、时间中抽取出某个单独的部分或组合。
1. SELECT now(),extract(YEAR FROM now()); -- 年
2. SELECT now(),extract(QUARTER FROM now()); -- 季度
3. SELECT now(),extract(MONTH FROM now()); -- 月
4. SELECT now(),extract(WEEK FROM now()); -- 周,开年第一个星期从0开始算
5. SELECT now(),extract(DAY FROM now()); -- 日
6. SELECT now(),extract(HOUR FROM now()); -- 小时
7. SELECT now(),extract(MINUTE FROM now()); -- 分钟
8. SELECT now(),extract(SECOND FROM now()); -- 秒
9. SELECT now(),extract(YEAR_MONTH FROM now()); -- 年月,没有月日
10.SELECT now(),extract(HOUR_MINUTE FROM now()); -- 时分
11.SELECT now(),extract(HOUR_SECOND FROM now()); -- HOUR_SECOND时秒,不能跳过分钟,返回时分秒
12.SELECT now(),extract(MINUTE_SECOND FROM now()); -- 分秒
->
1. 2020-02-18 23:18:54 2020
2. 2020-02-18 23:18:54 1
3. 2020-02-18 23:18:54 2
4. 2020-02-18 23:18:54 7 # 第7周
5. 2020-02-18 23:18:54 18
6. 2020-02-18 23:18:54 23
7. 2020-02-18 23:18:54 18
8. 2020-02-18 23:18:54 54
9. 2020-02-18 23:18:54 202002
10.2020-02-18 23:18:54 2318
11.2020-02-18 23:18:54 231854
12.2020-02-18 23:18:54 1854
dayofyear(date) 返回日期在一年中的第几天。
dayofweek(date) 返回日期在一周中的第几天。
dayofmonth(date) 返回日期在一月中的第几天。
1. select now(),dayofyear(now());
2. select now(),dayofweek(now()); -- 周日为1
3. select now(),dayofmonth(now());
->
1. 2020-02-18 23:42:26 49
2. 2020-02-18 23:42:26 3
3. 2020-02-18 23:42:26 18
dayname(date) 返回星期名称
monthname(date) 返回月份名称
1. select now(),dayname(now());
2. select now(),monthname(now());
# 名称是中文or英文由系统变量lc_time_names控制(默认值是'en_US')。
show variables like 'lc_time_names';
# 设置为中文
set lc_time_names='zh_CN';
3. select dayname(now()),monthname(now());
->
1. 2020-02-18 23:42:26 Tuesday
2. 2020-02-18 23:42:26 February
3. 星期二 二月
unix_timestamp(date):返回日期(date)的时间戳(unix)。
-若参数不为空,则返回从’1970-01-01 00:00:00’ GMT开始到指定date的秒数值。
-若参数为空,则返回从’1970-01-01 00:00:00’ GMT开始到当前时间的秒数值。
from_unixtime():返回unix时间戳的日期值。
-将秒数转为日期,带时分秒。
1. select now(),unix_timestamp(now()),unix_timestamp('2020-2-18');
2. select from_unixtime(unix_timestamp(now())),from_unixtime(unix_timestamp('2020-2-18'))
->
1. 2020-02-18 23:55:15 1582041315 1581955200
2. 2020-02-18 23:55:15 2020-02-18 00:00:00
date_format(date,format):返回不同格式的日期或时间数据。
format格式大全
举例:
%y:年,2位数
%m:月份,数值(00-12)
%d:月的天,数值(00-31)
%Y:年,4位数
%M:月份名称
%D:带有英文前缀的月中的天
%r:时间,12-小时(hh:mm:ss AM 或 PM)
1. select date_format('2020-2-18','%y%y %m %d'),date_format('2020-2-18','%Y/%M/%D')
2. select now(),date_format(now(),'%r')
->
1. 2020 02 18 2020/二月/18th
2. 2020-02-19 00:18:34 12:18:34 AM